@memberjunction/ng-core-entity-forms 6.2.0 → 6.3.0-edge.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +5 -6
- package/dist/lib/custom/AIAgentCategories/ai-agent-category-header.panel.d.ts.map +1 -1
- package/dist/lib/custom/AIAgentCategories/ai-agent-category-header.panel.js +3 -3
- package/dist/lib/custom/AIAgentCategories/ai-agent-category-header.panel.js.map +1 -1
- package/dist/lib/custom/AIAgentSessions/ai-agent-session-form.component.d.ts +12 -0
- package/dist/lib/custom/AIAgentSessions/ai-agent-session-form.component.d.ts.map +1 -1
- package/dist/lib/custom/AIAgentSessions/ai-agent-session-form.component.js +293 -230
- package/dist/lib/custom/AIAgentSessions/ai-agent-session-form.component.js.map +1 -1
- package/dist/lib/custom/AIAgents/add-action-dialog.component.js +2 -2
- package/dist/lib/custom/AIAgents/agent-prompt-advanced-settings-dialog.component.js +2 -2
- package/dist/lib/custom/AIAgents/ai-agent-form.component.d.ts +11 -0
- package/dist/lib/custom/AIAgents/ai-agent-form.component.d.ts.map +1 -1
- package/dist/lib/custom/AIAgents/ai-agent-form.component.js +862 -812
- package/dist/lib/custom/AIAgents/ai-agent-form.component.js.map +1 -1
- package/dist/lib/custom/AIAgents/create-prompt-dialog.component.js +2 -2
- package/dist/lib/custom/AIAgents/create-sub-agent-dialog.component.js +2 -2
- package/dist/lib/custom/AIAgents/new-agent-dialog.component.js +2 -2
- package/dist/lib/custom/AIAgents/prompt-selector-dialog.component.js +2 -2
- package/dist/lib/custom/AIAgents/sub-agent-advanced-settings-dialog.component.js +2 -2
- package/dist/lib/custom/AIAgents/sub-agent-selector-dialog.component.js +2 -2
- package/dist/lib/custom/AIPromptRuns/ai-prompt-run-form.component.d.ts +12 -0
- package/dist/lib/custom/AIPromptRuns/ai-prompt-run-form.component.d.ts.map +1 -1
- package/dist/lib/custom/AIPromptRuns/ai-prompt-run-form.component.js +821 -763
- package/dist/lib/custom/AIPromptRuns/ai-prompt-run-form.component.js.map +1 -1
- package/dist/lib/custom/AIPromptRuns/chat-message-viewer.component.js +2 -2
- package/dist/lib/custom/AIPrompts/ai-prompt-form.component.d.ts +10 -0
- package/dist/lib/custom/AIPrompts/ai-prompt-form.component.d.ts.map +1 -1
- package/dist/lib/custom/AIPrompts/ai-prompt-form.component.js +700 -605
- package/dist/lib/custom/AIPrompts/ai-prompt-form.component.js.map +1 -1
- package/dist/lib/custom/Actions/action-execution-log-form.component.d.ts +10 -0
- package/dist/lib/custom/Actions/action-execution-log-form.component.d.ts.map +1 -1
- package/dist/lib/custom/Actions/action-execution-log-form.component.js +223 -175
- package/dist/lib/custom/Actions/action-execution-log-form.component.js.map +1 -1
- package/dist/lib/custom/Actions/action-form.component.d.ts +10 -0
- package/dist/lib/custom/Actions/action-form.component.d.ts.map +1 -1
- package/dist/lib/custom/Actions/action-form.component.js +502 -453
- package/dist/lib/custom/Actions/action-form.component.js.map +1 -1
- package/dist/lib/custom/Companies/company-header.panel.d.ts.map +1 -1
- package/dist/lib/custom/Companies/company-header.panel.js +3 -3
- package/dist/lib/custom/Companies/company-header.panel.js.map +1 -1
- package/dist/lib/custom/Conversations/conversation-header.panel.d.ts.map +1 -1
- package/dist/lib/custom/Conversations/conversation-header.panel.js +3 -3
- package/dist/lib/custom/Conversations/conversation-header.panel.js.map +1 -1
- package/dist/lib/custom/Employees/employee-header.panel.d.ts.map +1 -1
- package/dist/lib/custom/Employees/employee-header.panel.js +3 -3
- package/dist/lib/custom/Employees/employee-header.panel.js.map +1 -1
- package/dist/lib/custom/Entities/entity-form.component.d.ts +15 -0
- package/dist/lib/custom/Entities/entity-form.component.d.ts.map +1 -1
- package/dist/lib/custom/Entities/entity-form.component.js +836 -801
- package/dist/lib/custom/Entities/entity-form.component.js.map +1 -1
- package/dist/lib/custom/EntityActions/entityaction.form.component.js +2 -2
- package/dist/lib/custom/Files/file-form.component.js +2 -2
- package/dist/lib/custom/Lists/list-form.component.d.ts +5 -0
- package/dist/lib/custom/Lists/list-form.component.d.ts.map +1 -1
- package/dist/lib/custom/Lists/list-form.component.js +355 -338
- package/dist/lib/custom/Lists/list-form.component.js.map +1 -1
- package/dist/lib/custom/MLModels/ml-model-form.component.js +3 -3
- package/dist/lib/custom/MLModels/ml-model-form.component.js.map +1 -1
- package/dist/lib/custom/MLModels/ml-model-view-models.d.ts +17 -35
- package/dist/lib/custom/MLModels/ml-model-view-models.d.ts.map +1 -1
- package/dist/lib/custom/MLModels/ml-model-view-models.js +55 -54
- package/dist/lib/custom/MLModels/ml-model-view-models.js.map +1 -1
- package/dist/lib/custom/MLModels/ps-model-detail.component.d.ts +7 -99
- package/dist/lib/custom/MLModels/ps-model-detail.component.d.ts.map +1 -1
- package/dist/lib/custom/MLModels/ps-model-detail.component.js +124 -303
- package/dist/lib/custom/MLModels/ps-model-detail.component.js.map +1 -1
- package/dist/lib/custom/Queries/query-form.component.d.ts +9 -0
- package/dist/lib/custom/Queries/query-form.component.d.ts.map +1 -1
- package/dist/lib/custom/Queries/query-form.component.js +493 -444
- package/dist/lib/custom/Queries/query-form.component.js.map +1 -1
- package/dist/lib/custom/Queries/query-run-dialog.component.js +2 -2
- package/dist/lib/custom/Templates/template-param-dialog.component.js +2 -2
- package/dist/lib/custom/Templates/templates-form.component.d.ts +9 -0
- package/dist/lib/custom/Templates/templates-form.component.d.ts.map +1 -1
- package/dist/lib/custom/Templates/templates-form.component.js +118 -74
- package/dist/lib/custom/Templates/templates-form.component.js.map +1 -1
- package/dist/lib/custom/Tests/test-form.component.d.ts +5 -0
- package/dist/lib/custom/Tests/test-form.component.d.ts.map +1 -1
- package/dist/lib/custom/Tests/test-form.component.js +471 -451
- package/dist/lib/custom/Tests/test-form.component.js.map +1 -1
- package/dist/lib/custom/Tests/test-run-form.component.d.ts +5 -0
- package/dist/lib/custom/Tests/test-run-form.component.d.ts.map +1 -1
- package/dist/lib/custom/Tests/test-run-form.component.js +312 -289
- package/dist/lib/custom/Tests/test-run-form.component.js.map +1 -1
- package/dist/lib/custom/Tests/test-suite-form.component.d.ts +5 -0
- package/dist/lib/custom/Tests/test-suite-form.component.d.ts.map +1 -1
- package/dist/lib/custom/Tests/test-suite-form.component.js +697 -677
- package/dist/lib/custom/Tests/test-suite-form.component.js.map +1 -1
- package/dist/lib/custom/Tests/test-suite-run-form.component.d.ts +5 -0
- package/dist/lib/custom/Tests/test-suite-run-form.component.d.ts.map +1 -1
- package/dist/lib/custom/Tests/test-suite-run-form.component.js +453 -433
- package/dist/lib/custom/Tests/test-suite-run-form.component.js.map +1 -1
- package/dist/lib/custom/Users/user-header.panel.d.ts.map +1 -1
- package/dist/lib/custom/Users/user-header.panel.js +3 -3
- package/dist/lib/custom/Users/user-header.panel.js.map +1 -1
- package/dist/lib/custom/ai-agent-run/agent-run-cost-split.d.ts +2 -2
- package/dist/lib/custom/ai-agent-run/agent-run-cost-split.d.ts.map +1 -1
- package/dist/lib/custom/ai-agent-run/agent-run-cost-split.js +30 -13
- package/dist/lib/custom/ai-agent-run/agent-run-cost-split.js.map +1 -1
- package/dist/lib/custom/ai-agent-run/ai-agent-run.component.d.ts +23 -0
- package/dist/lib/custom/ai-agent-run/ai-agent-run.component.d.ts.map +1 -1
- package/dist/lib/custom/ai-agent-run/ai-agent-run.component.js +276 -216
- package/dist/lib/custom/ai-agent-run/ai-agent-run.component.js.map +1 -1
- package/dist/lib/custom/custom-forms.module.d.ts +1 -1
- package/dist/lib/custom/custom-forms.module.d.ts.map +1 -1
- package/dist/lib/custom/custom-forms.module.js +7 -1
- package/dist/lib/custom/custom-forms.module.js.map +1 -1
- package/dist/lib/generated/Entities/MJAIPromptRun/mjaipromptrun.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJAIPromptRun/mjaipromptrun.form.component.js +32 -14
- package/dist/lib/generated/Entities/MJAIPromptRun/mjaipromptrun.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJAction/mjaction.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJAction/mjaction.form.component.js +119 -95
- package/dist/lib/generated/Entities/MJAction/mjaction.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJComment/mjcomment.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/MJComment/mjcomment.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/MJComment/mjcomment.form.component.js +124 -0
- package/dist/lib/generated/Entities/MJComment/mjcomment.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/MJCommentType/mjcommenttype.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/MJCommentType/mjcommenttype.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/MJCommentType/mjcommenttype.form.component.js +99 -0
- package/dist/lib/generated/Entities/MJCommentType/mjcommenttype.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/MJConversation/mjconversation.form.component.js +2 -2
- package/dist/lib/generated/Entities/MJConversation/mjconversation.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJConversationType/mjconversationtype.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/MJConversationType/mjconversationtype.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/MJConversationType/mjconversationtype.form.component.js +95 -0
- package/dist/lib/generated/Entities/MJConversationType/mjconversationtype.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/MJDocumentSequenceCounter/mjdocumentsequencecounter.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/MJDocumentSequenceCounter/mjdocumentsequencecounter.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/MJDocumentSequenceCounter/mjdocumentsequencecounter.form.component.js +60 -0
- package/dist/lib/generated/Entities/MJDocumentSequenceCounter/mjdocumentsequencecounter.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/MJEntity/mjentity.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJEntity/mjentity.form.component.js +124 -106
- package/dist/lib/generated/Entities/MJEntity/mjentity.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJEntityFieldValue/mjentityfieldvalue.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJEntityFieldValue/mjentityfieldvalue.form.component.js +12 -4
- package/dist/lib/generated/Entities/MJEntityFieldValue/mjentityfieldvalue.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJEntityOrganicKey/mjentityorganickey.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJEntityOrganicKey/mjentityorganickey.form.component.js +19 -11
- package/dist/lib/generated/Entities/MJEntityOrganicKey/mjentityorganickey.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJEntityUniqueKey/mjentityuniquekey.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/MJEntityUniqueKey/mjentityuniquekey.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/MJEntityUniqueKey/mjentityuniquekey.form.component.js +62 -0
- package/dist/lib/generated/Entities/MJEntityUniqueKey/mjentityuniquekey.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/MJFeatureValue/mjfeaturevalue.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJFeatureValue/mjfeaturevalue.form.component.js +26 -12
- package/dist/lib/generated/Entities/MJFeatureValue/mjfeaturevalue.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJFieldSuggestion/mjfieldsuggestion.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/MJFieldSuggestion/mjfieldsuggestion.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/MJFieldSuggestion/mjfieldsuggestion.form.component.js +140 -0
- package/dist/lib/generated/Entities/MJFieldSuggestion/mjfieldsuggestion.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/MJFile/mjfile.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJFile/mjfile.form.component.js +69 -15
- package/dist/lib/generated/Entities/MJFile/mjfile.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJFileStorageProvider/mjfilestorageprovider.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJFileStorageProvider/mjfilestorageprovider.form.component.js +31 -13
- package/dist/lib/generated/Entities/MJFileStorageProvider/mjfilestorageprovider.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJMLEvaluationProtocol/mjmlevaluationprotocol.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/MJMLEvaluationProtocol/mjmlevaluationprotocol.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/MJMLEvaluationProtocol/mjmlevaluationprotocol.form.component.js +205 -0
- package/dist/lib/generated/Entities/MJMLEvaluationProtocol/mjmlevaluationprotocol.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/MJMLModel/mjmlmodel.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJMLModel/mjmlmodel.form.component.js +24 -6
- package/dist/lib/generated/Entities/MJMLModel/mjmlmodel.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJMLPredictionUnit/mjmlpredictionunit.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/MJMLPredictionUnit/mjmlpredictionunit.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/MJMLPredictionUnit/mjmlpredictionunit.form.component.js +173 -0
- package/dist/lib/generated/Entities/MJMLPredictionUnit/mjmlpredictionunit.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/MJMLTrainingPipeline/mjmltrainingpipeline.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJMLTrainingPipeline/mjmltrainingpipeline.form.component.js +46 -24
- package/dist/lib/generated/Entities/MJMLTrainingPipeline/mjmltrainingpipeline.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJMLTrainingRun/mjmltrainingrun.form.component.js +22 -14
- package/dist/lib/generated/Entities/MJMLTrainingRun/mjmltrainingrun.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJMLTrainingSnapshot/mjmltrainingsnapshot.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/MJMLTrainingSnapshot/mjmltrainingsnapshot.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/MJMLTrainingSnapshot/mjmltrainingsnapshot.form.component.js +175 -0
- package/dist/lib/generated/Entities/MJMLTrainingSnapshot/mjmltrainingsnapshot.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/MJQueryField/mjqueryfield.form.component.js +8 -6
- package/dist/lib/generated/Entities/MJQueryField/mjqueryfield.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJRecordProcess/mjrecordprocess.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJRecordProcess/mjrecordprocess.form.component.js +44 -36
- package/dist/lib/generated/Entities/MJRecordProcess/mjrecordprocess.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJTask/mjtask.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJTask/mjtask.form.component.js +54 -32
- package/dist/lib/generated/Entities/MJTask/mjtask.form.component.js.map +1 -1
- package/dist/lib/generated/generated-forms.module.d.ts +452 -443
- package/dist/lib/generated/generated-forms.module.d.ts.map +1 -1
- package/dist/lib/generated/generated-forms.module.js +27 -0
- package/dist/lib/generated/generated-forms.module.js.map +1 -1
- package/dist/lib/panels/feature-values/feature-values.panel.js +1 -1
- package/dist/lib/panels/feature-values/feature-values.panel.js.map +1 -1
- package/dist/lib/panels/model-predictions/model-prediction.logic.d.ts +1 -1
- package/dist/lib/panels/model-predictions/model-prediction.logic.d.ts.map +1 -1
- package/dist/lib/panels/model-predictions/model-prediction.logic.js.map +1 -1
- package/dist/lib/shared/components/template-editor.component.js +2 -2
- package/dist/lib/shared/phone-hero.d.ts +17 -0
- package/dist/lib/shared/phone-hero.d.ts.map +1 -0
- package/dist/lib/shared/phone-hero.js +30 -0
- package/dist/lib/shared/phone-hero.js.map +1 -0
- package/dist/lib/shared/phone-sections-state.d.ts +28 -0
- package/dist/lib/shared/phone-sections-state.d.ts.map +1 -0
- package/dist/lib/shared/phone-sections-state.js +38 -0
- package/dist/lib/shared/phone-sections-state.js.map +1 -0
- package/package.json +50 -50
|
@@ -4,6 +4,7 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
|
|
|
4
4
|
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
5
|
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
6
|
};
|
|
7
|
+
var MJAIAgentSessionFormComponentExtended_1;
|
|
7
8
|
import { Component, inject } from '@angular/core';
|
|
8
9
|
import { CompositeKey, RunView } from '@memberjunction/core';
|
|
9
10
|
import { RegisterClass, UUIDsEqual } from '@memberjunction/global';
|
|
@@ -11,6 +12,7 @@ import { BaseFormComponent, CUSTOM_LAYOUT_TOOLBAR_CONFIG } from '@memberjunction
|
|
|
11
12
|
import { SharedService, NavigationService } from '@memberjunction/ng-shared';
|
|
12
13
|
import { ApplicationManager } from '@memberjunction/ng-base-application';
|
|
13
14
|
import { MJAIAgentSessionFormComponent } from '../../generated/Entities/MJAIAgentSession/mjaiagentsession.form.component';
|
|
15
|
+
import { JoinHeroSummary, CountLabel } from '../../shared/phone-hero';
|
|
14
16
|
import * as i0 from "@angular/core";
|
|
15
17
|
import * as i1 from "@angular/common";
|
|
16
18
|
import * as i2 from "@angular/forms";
|
|
@@ -23,7 +25,7 @@ const _forTrack1 = ($index, $item) => $item.row.ID;
|
|
|
23
25
|
const _forTrack2 = ($index, $item) => $item.ID;
|
|
24
26
|
function MJAIAgentSessionFormComponentExtended_Conditional_0_Conditional_11_Template(rf, ctx) { if (rf & 1) {
|
|
25
27
|
const _r3 = i0.ɵɵgetCurrentView();
|
|
26
|
-
i0.ɵɵelementStart(0, "span", 10)(1, "a",
|
|
28
|
+
i0.ɵɵelementStart(0, "span", 10)(1, "a", 47);
|
|
27
29
|
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
30
|
i0.ɵɵtext(2);
|
|
29
31
|
i0.ɵɵelementEnd()();
|
|
@@ -36,8 +38,8 @@ function MJAIAgentSessionFormComponentExtended_Conditional_0_Conditional_11_Temp
|
|
|
36
38
|
} }
|
|
37
39
|
function MJAIAgentSessionFormComponentExtended_Conditional_0_Conditional_12_Template(rf, ctx) { if (rf & 1) {
|
|
38
40
|
const _r4 = i0.ɵɵgetCurrentView();
|
|
39
|
-
i0.ɵɵelement(0, "i",
|
|
40
|
-
i0.ɵɵelementStart(1, "span", 10)(2, "a",
|
|
41
|
+
i0.ɵɵelement(0, "i", 48);
|
|
42
|
+
i0.ɵɵelementStart(1, "span", 10)(2, "a", 49);
|
|
41
43
|
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)); });
|
|
42
44
|
i0.ɵɵtext(3);
|
|
43
45
|
i0.ɵɵelementEnd()();
|
|
@@ -50,13 +52,13 @@ function MJAIAgentSessionFormComponentExtended_Conditional_0_Conditional_12_Temp
|
|
|
50
52
|
} }
|
|
51
53
|
function MJAIAgentSessionFormComponentExtended_Conditional_0_Conditional_15_Template(rf, ctx) { if (rf & 1) {
|
|
52
54
|
const _r5 = i0.ɵɵgetCurrentView();
|
|
53
|
-
i0.ɵɵelementStart(0, "span",
|
|
55
|
+
i0.ɵɵelementStart(0, "span", 50);
|
|
54
56
|
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()); });
|
|
55
|
-
i0.ɵɵelement(1, "i",
|
|
57
|
+
i0.ɵɵelement(1, "i", 42);
|
|
56
58
|
i0.ɵɵelementStart(2, "span");
|
|
57
59
|
i0.ɵɵtext(3);
|
|
58
60
|
i0.ɵɵelementEnd();
|
|
59
|
-
i0.ɵɵelement(4, "i",
|
|
61
|
+
i0.ɵɵelement(4, "i", 51);
|
|
60
62
|
i0.ɵɵelementEnd();
|
|
61
63
|
} if (rf & 2) {
|
|
62
64
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
@@ -106,7 +108,7 @@ function MJAIAgentSessionFormComponentExtended_Conditional_0_Conditional_54_Temp
|
|
|
106
108
|
i0.ɵɵelementStart(0, "div", 20)(1, "span", 21);
|
|
107
109
|
i0.ɵɵtext(2, "Cost");
|
|
108
110
|
i0.ɵɵelementEnd();
|
|
109
|
-
i0.ɵɵelementStart(3, "span",
|
|
111
|
+
i0.ɵɵelementStart(3, "span", 52);
|
|
110
112
|
i0.ɵɵtext(4);
|
|
111
113
|
i0.ɵɵpipe(5, "number");
|
|
112
114
|
i0.ɵɵelementEnd()();
|
|
@@ -117,7 +119,7 @@ function MJAIAgentSessionFormComponentExtended_Conditional_0_Conditional_54_Temp
|
|
|
117
119
|
} }
|
|
118
120
|
function MJAIAgentSessionFormComponentExtended_Conditional_0_Conditional_62_Template(rf, ctx) { if (rf & 1) {
|
|
119
121
|
const _r6 = i0.ɵɵgetCurrentView();
|
|
120
|
-
i0.ɵɵelementStart(0, "a",
|
|
122
|
+
i0.ɵɵelementStart(0, "a", 53);
|
|
121
123
|
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)); });
|
|
122
124
|
i0.ɵɵtext(1);
|
|
123
125
|
i0.ɵɵelementEnd();
|
|
@@ -133,7 +135,7 @@ function MJAIAgentSessionFormComponentExtended_Conditional_0_Conditional_63_Temp
|
|
|
133
135
|
} }
|
|
134
136
|
function MJAIAgentSessionFormComponentExtended_Conditional_0_Conditional_77_Template(rf, ctx) { if (rf & 1) {
|
|
135
137
|
const _r7 = i0.ɵɵgetCurrentView();
|
|
136
|
-
i0.ɵɵelementStart(0, "a",
|
|
138
|
+
i0.ɵɵelementStart(0, "a", 53);
|
|
137
139
|
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)); });
|
|
138
140
|
i0.ɵɵtext(1, " Resumed from prior session ");
|
|
139
141
|
i0.ɵɵelementEnd();
|
|
@@ -143,8 +145,23 @@ function MJAIAgentSessionFormComponentExtended_Conditional_0_Conditional_78_Temp
|
|
|
143
145
|
i0.ɵɵtext(1, "None (new session)");
|
|
144
146
|
i0.ɵɵelementEnd();
|
|
145
147
|
} }
|
|
146
|
-
function
|
|
147
|
-
i0.ɵɵ
|
|
148
|
+
function MJAIAgentSessionFormComponentExtended_Conditional_0_Conditional_79_Template(rf, ctx) { if (rf & 1) {
|
|
149
|
+
const _r8 = i0.ɵɵgetCurrentView();
|
|
150
|
+
i0.ɵɵelementStart(0, "button", 54);
|
|
151
|
+
i0.ɵɵlistener("click", function MJAIAgentSessionFormComponentExtended_Conditional_0_Conditional_79_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r8); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.ToggleHeroDetails()); });
|
|
152
|
+
i0.ɵɵelementStart(1, "span", 55);
|
|
153
|
+
i0.ɵɵtext(2);
|
|
154
|
+
i0.ɵɵelementEnd();
|
|
155
|
+
i0.ɵɵelement(3, "i", 56);
|
|
156
|
+
i0.ɵɵelementEnd();
|
|
157
|
+
} if (rf & 2) {
|
|
158
|
+
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
159
|
+
i0.ɵɵattribute("aria-expanded", ctx_r1.HeroDetailsOpen);
|
|
160
|
+
i0.ɵɵadvance(2);
|
|
161
|
+
i0.ɵɵtextInterpolate(ctx_r1.HeroSummary);
|
|
162
|
+
} }
|
|
163
|
+
function MJAIAgentSessionFormComponentExtended_Conditional_0_Conditional_85_Template(rf, ctx) { if (rf & 1) {
|
|
164
|
+
i0.ɵɵelementStart(0, "span", 40);
|
|
148
165
|
i0.ɵɵtext(1);
|
|
149
166
|
i0.ɵɵelementEnd();
|
|
150
167
|
} if (rf & 2) {
|
|
@@ -152,8 +169,8 @@ function MJAIAgentSessionFormComponentExtended_Conditional_0_Conditional_83_Temp
|
|
|
152
169
|
i0.ɵɵadvance();
|
|
153
170
|
i0.ɵɵtextInterpolate(ctx_r1.RunTree.length);
|
|
154
171
|
} }
|
|
155
|
-
function
|
|
156
|
-
i0.ɵɵelementStart(0, "span",
|
|
172
|
+
function MJAIAgentSessionFormComponentExtended_Conditional_0_Conditional_89_Template(rf, ctx) { if (rf & 1) {
|
|
173
|
+
i0.ɵɵelementStart(0, "span", 40);
|
|
157
174
|
i0.ɵɵtext(1);
|
|
158
175
|
i0.ɵɵelementEnd();
|
|
159
176
|
} if (rf & 2) {
|
|
@@ -161,8 +178,8 @@ function MJAIAgentSessionFormComponentExtended_Conditional_0_Conditional_87_Temp
|
|
|
161
178
|
i0.ɵɵadvance();
|
|
162
179
|
i0.ɵɵtextInterpolate(ctx_r1.Channels.length);
|
|
163
180
|
} }
|
|
164
|
-
function
|
|
165
|
-
i0.ɵɵelementStart(0, "span",
|
|
181
|
+
function MJAIAgentSessionFormComponentExtended_Conditional_0_Conditional_93_Template(rf, ctx) { if (rf & 1) {
|
|
182
|
+
i0.ɵɵelementStart(0, "span", 40);
|
|
166
183
|
i0.ɵɵtext(1);
|
|
167
184
|
i0.ɵɵelementEnd();
|
|
168
185
|
} if (rf & 2) {
|
|
@@ -170,207 +187,207 @@ function MJAIAgentSessionFormComponentExtended_Conditional_0_Conditional_91_Temp
|
|
|
170
187
|
i0.ɵɵadvance();
|
|
171
188
|
i0.ɵɵtextInterpolate(ctx_r1.Transcript.length);
|
|
172
189
|
} }
|
|
173
|
-
function
|
|
174
|
-
i0.ɵɵelement(0, "mj-loading",
|
|
190
|
+
function MJAIAgentSessionFormComponentExtended_Conditional_0_Conditional_98_Template(rf, ctx) { if (rf & 1) {
|
|
191
|
+
i0.ɵɵelement(0, "mj-loading", 45);
|
|
175
192
|
} }
|
|
176
|
-
function
|
|
177
|
-
i0.ɵɵelement(0, "mj-empty-state",
|
|
193
|
+
function MJAIAgentSessionFormComponentExtended_Conditional_0_Conditional_99_Template(rf, ctx) { if (rf & 1) {
|
|
194
|
+
i0.ɵɵelement(0, "mj-empty-state", 46);
|
|
178
195
|
} if (rf & 2) {
|
|
179
196
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
180
197
|
i0.ɵɵproperty("Message", ctx_r1.LoadError);
|
|
181
198
|
} }
|
|
182
|
-
function
|
|
183
|
-
i0.ɵɵelement(0, "mj-empty-state",
|
|
199
|
+
function MJAIAgentSessionFormComponentExtended_Conditional_0_Conditional_100_Conditional_0_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
200
|
+
i0.ɵɵelement(0, "mj-empty-state", 58);
|
|
184
201
|
} }
|
|
185
|
-
function
|
|
186
|
-
i0.ɵɵelement(0, "i",
|
|
202
|
+
function MJAIAgentSessionFormComponentExtended_Conditional_0_Conditional_100_Conditional_0_Conditional_2_For_2_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
203
|
+
i0.ɵɵelement(0, "i", 63);
|
|
187
204
|
} }
|
|
188
|
-
function
|
|
205
|
+
function MJAIAgentSessionFormComponentExtended_Conditional_0_Conditional_100_Conditional_0_Conditional_2_For_2_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
189
206
|
i0.ɵɵelement(0, "i", 7);
|
|
190
207
|
} }
|
|
191
|
-
function
|
|
192
|
-
i0.ɵɵelement(0, "i",
|
|
208
|
+
function MJAIAgentSessionFormComponentExtended_Conditional_0_Conditional_100_Conditional_0_Conditional_2_For_2_Conditional_4_Template(rf, ctx) { if (rf & 1) {
|
|
209
|
+
i0.ɵɵelement(0, "i", 64);
|
|
193
210
|
} }
|
|
194
|
-
function
|
|
195
|
-
i0.ɵɵelementStart(0, "span",
|
|
196
|
-
i0.ɵɵelement(1, "i",
|
|
211
|
+
function MJAIAgentSessionFormComponentExtended_Conditional_0_Conditional_100_Conditional_0_Conditional_2_For_2_Conditional_21_Template(rf, ctx) { if (rf & 1) {
|
|
212
|
+
i0.ɵɵelementStart(0, "span", 72);
|
|
213
|
+
i0.ɵɵelement(1, "i", 74);
|
|
197
214
|
i0.ɵɵtext(2);
|
|
198
215
|
i0.ɵɵpipe(3, "number");
|
|
199
216
|
i0.ɵɵelementEnd();
|
|
200
217
|
} if (rf & 2) {
|
|
201
|
-
const
|
|
218
|
+
const node_r10 = i0.ɵɵnextContext().$implicit;
|
|
202
219
|
i0.ɵɵadvance(2);
|
|
203
|
-
i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind2(3, 1,
|
|
220
|
+
i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind2(3, 1, node_r10.tokens, "1.0-0"), " tok");
|
|
204
221
|
} }
|
|
205
|
-
function
|
|
206
|
-
i0.ɵɵelementStart(0, "span",
|
|
207
|
-
i0.ɵɵelement(1, "i",
|
|
222
|
+
function MJAIAgentSessionFormComponentExtended_Conditional_0_Conditional_100_Conditional_0_Conditional_2_For_2_Conditional_22_Template(rf, ctx) { if (rf & 1) {
|
|
223
|
+
i0.ɵɵelementStart(0, "span", 72);
|
|
224
|
+
i0.ɵɵelement(1, "i", 75);
|
|
208
225
|
i0.ɵɵtext(2);
|
|
209
226
|
i0.ɵɵpipe(3, "number");
|
|
210
227
|
i0.ɵɵelementEnd();
|
|
211
228
|
} if (rf & 2) {
|
|
212
|
-
const
|
|
229
|
+
const node_r10 = i0.ɵɵnextContext().$implicit;
|
|
213
230
|
i0.ɵɵadvance(2);
|
|
214
|
-
i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind2(3, 1,
|
|
231
|
+
i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind2(3, 1, node_r10.cost, "1.2-4"));
|
|
215
232
|
} }
|
|
216
|
-
function
|
|
217
|
-
const
|
|
218
|
-
i0.ɵɵelementStart(0, "div",
|
|
219
|
-
i0.ɵɵlistener("click", function
|
|
220
|
-
i0.ɵɵelementStart(1, "div",
|
|
221
|
-
i0.ɵɵconditionalCreate(2,
|
|
222
|
-
i0.ɵɵelementEnd();
|
|
223
|
-
i0.ɵɵelementStart(5, "div",
|
|
233
|
+
function MJAIAgentSessionFormComponentExtended_Conditional_0_Conditional_100_Conditional_0_Conditional_2_For_2_Template(rf, ctx) { if (rf & 1) {
|
|
234
|
+
const _r9 = i0.ɵɵgetCurrentView();
|
|
235
|
+
i0.ɵɵelementStart(0, "div", 61);
|
|
236
|
+
i0.ɵɵlistener("click", function MJAIAgentSessionFormComponentExtended_Conditional_0_Conditional_100_Conditional_0_Conditional_2_For_2_Template_div_click_0_listener() { const node_r10 = i0.ɵɵrestoreView(_r9).$implicit; const ctx_r1 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r1.OpenEntityRecord(node_r10.entityName, node_r10.id)); });
|
|
237
|
+
i0.ɵɵelementStart(1, "div", 62);
|
|
238
|
+
i0.ɵɵconditionalCreate(2, MJAIAgentSessionFormComponentExtended_Conditional_0_Conditional_100_Conditional_0_Conditional_2_For_2_Conditional_2_Template, 1, 0, "i", 63)(3, MJAIAgentSessionFormComponentExtended_Conditional_0_Conditional_100_Conditional_0_Conditional_2_For_2_Conditional_3_Template, 1, 0, "i", 7)(4, MJAIAgentSessionFormComponentExtended_Conditional_0_Conditional_100_Conditional_0_Conditional_2_For_2_Conditional_4_Template, 1, 0, "i", 64);
|
|
239
|
+
i0.ɵɵelementEnd();
|
|
240
|
+
i0.ɵɵelementStart(5, "div", 65)(6, "div", 66)(7, "h4", 67);
|
|
224
241
|
i0.ɵɵtext(8);
|
|
225
242
|
i0.ɵɵelementEnd();
|
|
226
|
-
i0.ɵɵelementStart(9, "span",
|
|
243
|
+
i0.ɵɵelementStart(9, "span", 68);
|
|
227
244
|
i0.ɵɵtext(10);
|
|
228
245
|
i0.ɵɵpipe(11, "date");
|
|
229
246
|
i0.ɵɵelementEnd()();
|
|
230
|
-
i0.ɵɵelementStart(12, "div",
|
|
247
|
+
i0.ɵɵelementStart(12, "div", 69);
|
|
231
248
|
i0.ɵɵtext(13);
|
|
232
249
|
i0.ɵɵelementEnd();
|
|
233
|
-
i0.ɵɵelementStart(14, "div",
|
|
250
|
+
i0.ɵɵelementStart(14, "div", 70)(15, "span", 71);
|
|
234
251
|
i0.ɵɵelement(16, "i", 15);
|
|
235
252
|
i0.ɵɵtext(17);
|
|
236
253
|
i0.ɵɵelementEnd();
|
|
237
|
-
i0.ɵɵelementStart(18, "span",
|
|
238
|
-
i0.ɵɵelement(19, "i",
|
|
254
|
+
i0.ɵɵelementStart(18, "span", 72);
|
|
255
|
+
i0.ɵɵelement(19, "i", 73);
|
|
239
256
|
i0.ɵɵtext(20);
|
|
240
257
|
i0.ɵɵelementEnd();
|
|
241
|
-
i0.ɵɵconditionalCreate(21,
|
|
242
|
-
i0.ɵɵconditionalCreate(22,
|
|
258
|
+
i0.ɵɵconditionalCreate(21, MJAIAgentSessionFormComponentExtended_Conditional_0_Conditional_100_Conditional_0_Conditional_2_For_2_Conditional_21_Template, 4, 4, "span", 72);
|
|
259
|
+
i0.ɵɵconditionalCreate(22, MJAIAgentSessionFormComponentExtended_Conditional_0_Conditional_100_Conditional_0_Conditional_2_For_2_Conditional_22_Template, 4, 4, "span", 72);
|
|
243
260
|
i0.ɵɵelementEnd()()();
|
|
244
261
|
} if (rf & 2) {
|
|
245
|
-
const
|
|
262
|
+
const node_r10 = ctx.$implicit;
|
|
246
263
|
const ctx_r1 = i0.ɵɵnextContext(5);
|
|
247
|
-
i0.ɵɵstyleProp("margin-left",
|
|
248
|
-
i0.ɵɵclassProp("run-node--child",
|
|
264
|
+
i0.ɵɵstyleProp("margin-left", node_r10.depth * 36, "px");
|
|
265
|
+
i0.ɵɵclassProp("run-node--child", node_r10.depth > 0);
|
|
249
266
|
i0.ɵɵadvance();
|
|
250
|
-
i0.ɵɵclassProp("run-marker--coagent",
|
|
267
|
+
i0.ɵɵclassProp("run-marker--coagent", node_r10.isCoAgentRun)("run-marker--prompt", node_r10.kind === "promptRun");
|
|
251
268
|
i0.ɵɵadvance();
|
|
252
|
-
i0.ɵɵconditional(
|
|
269
|
+
i0.ɵɵconditional(node_r10.kind === "promptRun" ? 2 : node_r10.isCoAgentRun ? 3 : 4);
|
|
253
270
|
i0.ɵɵadvance(6);
|
|
254
|
-
i0.ɵɵtextInterpolate(
|
|
271
|
+
i0.ɵɵtextInterpolate(node_r10.title);
|
|
255
272
|
i0.ɵɵadvance(2);
|
|
256
|
-
i0.ɵɵtextInterpolate(i0.ɵɵpipeBind2(11, 18,
|
|
273
|
+
i0.ɵɵtextInterpolate(i0.ɵɵpipeBind2(11, 18, node_r10.startedAt, "h:mm:ss a"));
|
|
257
274
|
i0.ɵɵadvance(3);
|
|
258
|
-
i0.ɵɵtextInterpolate(
|
|
275
|
+
i0.ɵɵtextInterpolate(node_r10.subtitle);
|
|
259
276
|
i0.ɵɵadvance(2);
|
|
260
|
-
i0.ɵɵattribute("data-status",
|
|
277
|
+
i0.ɵɵattribute("data-status", node_r10.status);
|
|
261
278
|
i0.ɵɵadvance();
|
|
262
|
-
i0.ɵɵproperty("ngClass", ctx_r1.GetRunStatusIcon(
|
|
279
|
+
i0.ɵɵproperty("ngClass", ctx_r1.GetRunStatusIcon(node_r10.status));
|
|
263
280
|
i0.ɵɵadvance();
|
|
264
|
-
i0.ɵɵtextInterpolate1(" ",
|
|
281
|
+
i0.ɵɵtextInterpolate1(" ", node_r10.status, " ");
|
|
265
282
|
i0.ɵɵadvance(3);
|
|
266
|
-
i0.ɵɵtextInterpolate1(" ", ctx_r1.FormatDuration(
|
|
283
|
+
i0.ɵɵtextInterpolate1(" ", ctx_r1.FormatDuration(node_r10.startedAt, node_r10.completedAt), " ");
|
|
267
284
|
i0.ɵɵadvance();
|
|
268
|
-
i0.ɵɵconditional(
|
|
285
|
+
i0.ɵɵconditional(node_r10.tokens != null && node_r10.tokens > 0 ? 21 : -1);
|
|
269
286
|
i0.ɵɵadvance();
|
|
270
|
-
i0.ɵɵconditional(
|
|
287
|
+
i0.ɵɵconditional(node_r10.cost != null && node_r10.cost > 0 ? 22 : -1);
|
|
271
288
|
} }
|
|
272
|
-
function
|
|
273
|
-
i0.ɵɵelementStart(0, "div",
|
|
274
|
-
i0.ɵɵrepeaterCreate(1,
|
|
289
|
+
function MJAIAgentSessionFormComponentExtended_Conditional_0_Conditional_100_Conditional_0_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
290
|
+
i0.ɵɵelementStart(0, "div", 59);
|
|
291
|
+
i0.ɵɵrepeaterCreate(1, MJAIAgentSessionFormComponentExtended_Conditional_0_Conditional_100_Conditional_0_Conditional_2_For_2_Template, 23, 21, "div", 60, _forTrack0);
|
|
275
292
|
i0.ɵɵelementEnd();
|
|
276
293
|
} if (rf & 2) {
|
|
277
294
|
const ctx_r1 = i0.ɵɵnextContext(4);
|
|
278
295
|
i0.ɵɵadvance();
|
|
279
296
|
i0.ɵɵrepeater(ctx_r1.RunTree);
|
|
280
297
|
} }
|
|
281
|
-
function
|
|
282
|
-
i0.ɵɵelementStart(0, "div",
|
|
283
|
-
i0.ɵɵconditionalCreate(1,
|
|
298
|
+
function MJAIAgentSessionFormComponentExtended_Conditional_0_Conditional_100_Conditional_0_Template(rf, ctx) { if (rf & 1) {
|
|
299
|
+
i0.ɵɵelementStart(0, "div", 57);
|
|
300
|
+
i0.ɵɵconditionalCreate(1, MJAIAgentSessionFormComponentExtended_Conditional_0_Conditional_100_Conditional_0_Conditional_1_Template, 1, 0, "mj-empty-state", 58)(2, MJAIAgentSessionFormComponentExtended_Conditional_0_Conditional_100_Conditional_0_Conditional_2_Template, 3, 0, "div", 59);
|
|
284
301
|
i0.ɵɵelementEnd();
|
|
285
302
|
} if (rf & 2) {
|
|
286
303
|
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
287
304
|
i0.ɵɵadvance();
|
|
288
305
|
i0.ɵɵconditional(ctx_r1.RunTree.length === 0 ? 1 : 2);
|
|
289
306
|
} }
|
|
290
|
-
function
|
|
291
|
-
i0.ɵɵelement(0, "mj-empty-state",
|
|
307
|
+
function MJAIAgentSessionFormComponentExtended_Conditional_0_Conditional_100_Conditional_1_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
308
|
+
i0.ɵɵelement(0, "mj-empty-state", 76);
|
|
292
309
|
} }
|
|
293
|
-
function
|
|
294
|
-
i0.ɵɵelementStart(0, "span",
|
|
310
|
+
function MJAIAgentSessionFormComponentExtended_Conditional_0_Conditional_100_Conditional_1_Conditional_2_For_20_Conditional_6_Template(rf, ctx) { if (rf & 1) {
|
|
311
|
+
i0.ɵɵelementStart(0, "span", 82);
|
|
295
312
|
i0.ɵɵtext(1);
|
|
296
313
|
i0.ɵɵelementEnd();
|
|
297
314
|
} if (rf & 2) {
|
|
298
|
-
const
|
|
299
|
-
i0.ɵɵattribute("data-transport",
|
|
315
|
+
const channel_r12 = i0.ɵɵnextContext().$implicit;
|
|
316
|
+
i0.ɵɵattribute("data-transport", channel_r12.transportType);
|
|
300
317
|
i0.ɵɵadvance();
|
|
301
|
-
i0.ɵɵtextInterpolate(
|
|
318
|
+
i0.ɵɵtextInterpolate(channel_r12.transportType);
|
|
302
319
|
} }
|
|
303
|
-
function
|
|
320
|
+
function MJAIAgentSessionFormComponentExtended_Conditional_0_Conditional_100_Conditional_1_Conditional_2_For_20_Conditional_7_Template(rf, ctx) { if (rf & 1) {
|
|
304
321
|
i0.ɵɵelementStart(0, "span", 31);
|
|
305
322
|
i0.ɵɵtext(1, "\u2014");
|
|
306
323
|
i0.ɵɵelementEnd();
|
|
307
324
|
} }
|
|
308
|
-
function
|
|
325
|
+
function MJAIAgentSessionFormComponentExtended_Conditional_0_Conditional_100_Conditional_1_Conditional_2_For_20_Conditional_18_Template(rf, ctx) { if (rf & 1) {
|
|
309
326
|
i0.ɵɵtext(0);
|
|
310
327
|
i0.ɵɵpipe(1, "date");
|
|
311
328
|
} if (rf & 2) {
|
|
312
|
-
const
|
|
313
|
-
i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind2(1, 1,
|
|
329
|
+
const channel_r12 = i0.ɵɵnextContext().$implicit;
|
|
330
|
+
i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind2(1, 1, channel_r12.row.DisconnectedAt, "h:mm:ss a"), " ");
|
|
314
331
|
} }
|
|
315
|
-
function
|
|
332
|
+
function MJAIAgentSessionFormComponentExtended_Conditional_0_Conditional_100_Conditional_1_Conditional_2_For_20_Conditional_19_Template(rf, ctx) { if (rf & 1) {
|
|
316
333
|
i0.ɵɵelementStart(0, "span", 31);
|
|
317
334
|
i0.ɵɵtext(1, "\u2014");
|
|
318
335
|
i0.ɵɵelementEnd();
|
|
319
336
|
} }
|
|
320
|
-
function
|
|
321
|
-
const
|
|
322
|
-
i0.ɵɵelementStart(0, "tr",
|
|
323
|
-
i0.ɵɵlistener("click", function
|
|
324
|
-
i0.ɵɵelementStart(1, "td")(2, "span",
|
|
337
|
+
function MJAIAgentSessionFormComponentExtended_Conditional_0_Conditional_100_Conditional_1_Conditional_2_For_20_Template(rf, ctx) { if (rf & 1) {
|
|
338
|
+
const _r11 = i0.ɵɵgetCurrentView();
|
|
339
|
+
i0.ɵɵelementStart(0, "tr", 80);
|
|
340
|
+
i0.ɵɵlistener("click", function MJAIAgentSessionFormComponentExtended_Conditional_0_Conditional_100_Conditional_1_Conditional_2_For_20_Template_tr_click_0_listener() { const channel_r12 = i0.ɵɵrestoreView(_r11).$implicit; const ctx_r1 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r1.OpenEntityRecord("MJ: AI Agent Session Channels", channel_r12.row.ID)); });
|
|
341
|
+
i0.ɵɵelementStart(1, "td")(2, "span", 81);
|
|
325
342
|
i0.ɵɵelement(3, "i", 15);
|
|
326
343
|
i0.ɵɵtext(4);
|
|
327
344
|
i0.ɵɵelementEnd()();
|
|
328
345
|
i0.ɵɵelementStart(5, "td");
|
|
329
|
-
i0.ɵɵconditionalCreate(6,
|
|
346
|
+
i0.ɵɵconditionalCreate(6, MJAIAgentSessionFormComponentExtended_Conditional_0_Conditional_100_Conditional_1_Conditional_2_For_20_Conditional_6_Template, 2, 2, "span", 82)(7, MJAIAgentSessionFormComponentExtended_Conditional_0_Conditional_100_Conditional_1_Conditional_2_For_20_Conditional_7_Template, 2, 0, "span", 31);
|
|
330
347
|
i0.ɵɵelementEnd();
|
|
331
|
-
i0.ɵɵelementStart(8, "td")(9, "span",
|
|
348
|
+
i0.ɵɵelementStart(8, "td")(9, "span", 83);
|
|
332
349
|
i0.ɵɵtext(10);
|
|
333
350
|
i0.ɵɵelementEnd()();
|
|
334
|
-
i0.ɵɵelementStart(11, "td",
|
|
351
|
+
i0.ɵɵelementStart(11, "td", 84);
|
|
335
352
|
i0.ɵɵtext(12);
|
|
336
353
|
i0.ɵɵpipe(13, "date");
|
|
337
354
|
i0.ɵɵelementEnd();
|
|
338
|
-
i0.ɵɵelementStart(14, "td",
|
|
355
|
+
i0.ɵɵelementStart(14, "td", 84);
|
|
339
356
|
i0.ɵɵtext(15);
|
|
340
357
|
i0.ɵɵpipe(16, "date");
|
|
341
358
|
i0.ɵɵelementEnd();
|
|
342
|
-
i0.ɵɵelementStart(17, "td",
|
|
343
|
-
i0.ɵɵconditionalCreate(18,
|
|
359
|
+
i0.ɵɵelementStart(17, "td", 84);
|
|
360
|
+
i0.ɵɵconditionalCreate(18, MJAIAgentSessionFormComponentExtended_Conditional_0_Conditional_100_Conditional_1_Conditional_2_For_20_Conditional_18_Template, 2, 4)(19, MJAIAgentSessionFormComponentExtended_Conditional_0_Conditional_100_Conditional_1_Conditional_2_For_20_Conditional_19_Template, 2, 0, "span", 31);
|
|
344
361
|
i0.ɵɵelementEnd();
|
|
345
|
-
i0.ɵɵelementStart(20, "td",
|
|
362
|
+
i0.ɵɵelementStart(20, "td", 85);
|
|
346
363
|
i0.ɵɵtext(21);
|
|
347
364
|
i0.ɵɵelementEnd()();
|
|
348
365
|
} if (rf & 2) {
|
|
349
|
-
const
|
|
366
|
+
const channel_r12 = ctx.$implicit;
|
|
350
367
|
const ctx_r1 = i0.ɵɵnextContext(5);
|
|
351
368
|
i0.ɵɵadvance(3);
|
|
352
|
-
i0.ɵɵproperty("ngClass", ctx_r1.GetChannelIcon(
|
|
369
|
+
i0.ɵɵproperty("ngClass", ctx_r1.GetChannelIcon(channel_r12.row.Channel));
|
|
353
370
|
i0.ɵɵadvance();
|
|
354
|
-
i0.ɵɵtextInterpolate1(" ",
|
|
371
|
+
i0.ɵɵtextInterpolate1(" ", channel_r12.row.Channel, " ");
|
|
355
372
|
i0.ɵɵadvance(2);
|
|
356
|
-
i0.ɵɵconditional(
|
|
373
|
+
i0.ɵɵconditional(channel_r12.transportType ? 6 : 7);
|
|
357
374
|
i0.ɵɵadvance(3);
|
|
358
|
-
i0.ɵɵattribute("data-status",
|
|
375
|
+
i0.ɵɵattribute("data-status", channel_r12.row.Status);
|
|
359
376
|
i0.ɵɵadvance();
|
|
360
|
-
i0.ɵɵtextInterpolate(
|
|
377
|
+
i0.ɵɵtextInterpolate(channel_r12.row.Status);
|
|
361
378
|
i0.ɵɵadvance(2);
|
|
362
|
-
i0.ɵɵtextInterpolate(i0.ɵɵpipeBind2(13, 10,
|
|
379
|
+
i0.ɵɵtextInterpolate(i0.ɵɵpipeBind2(13, 10, channel_r12.row.__mj_CreatedAt, "h:mm:ss a"));
|
|
363
380
|
i0.ɵɵadvance(3);
|
|
364
|
-
i0.ɵɵtextInterpolate(i0.ɵɵpipeBind2(16, 13,
|
|
381
|
+
i0.ɵɵtextInterpolate(i0.ɵɵpipeBind2(16, 13, channel_r12.row.LastActiveAt, "h:mm:ss a"));
|
|
365
382
|
i0.ɵɵadvance(3);
|
|
366
|
-
i0.ɵɵconditional(
|
|
383
|
+
i0.ɵɵconditional(channel_r12.row.DisconnectedAt ? 18 : 19);
|
|
367
384
|
i0.ɵɵadvance(2);
|
|
368
|
-
i0.ɵɵproperty("title",
|
|
385
|
+
i0.ɵɵproperty("title", channel_r12.row.SocketUrl || "");
|
|
369
386
|
i0.ɵɵadvance();
|
|
370
|
-
i0.ɵɵtextInterpolate1(" ",
|
|
387
|
+
i0.ɵɵtextInterpolate1(" ", channel_r12.row.SocketUrl || "\u2014", " ");
|
|
371
388
|
} }
|
|
372
|
-
function
|
|
373
|
-
i0.ɵɵelementStart(0, "div",
|
|
389
|
+
function MJAIAgentSessionFormComponentExtended_Conditional_0_Conditional_100_Conditional_1_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
390
|
+
i0.ɵɵelementStart(0, "div", 77)(1, "table", 78)(2, "thead")(3, "tr")(4, "th");
|
|
374
391
|
i0.ɵɵtext(5, "Channel");
|
|
375
392
|
i0.ɵɵelementEnd();
|
|
376
393
|
i0.ɵɵelementStart(6, "th");
|
|
@@ -392,97 +409,97 @@ function MJAIAgentSessionFormComponentExtended_Conditional_0_Conditional_98_Cond
|
|
|
392
409
|
i0.ɵɵtext(17, "Socket");
|
|
393
410
|
i0.ɵɵelementEnd()()();
|
|
394
411
|
i0.ɵɵelementStart(18, "tbody");
|
|
395
|
-
i0.ɵɵrepeaterCreate(19,
|
|
412
|
+
i0.ɵɵrepeaterCreate(19, MJAIAgentSessionFormComponentExtended_Conditional_0_Conditional_100_Conditional_1_Conditional_2_For_20_Template, 22, 16, "tr", 79, _forTrack1);
|
|
396
413
|
i0.ɵɵelementEnd()()();
|
|
397
414
|
} if (rf & 2) {
|
|
398
415
|
const ctx_r1 = i0.ɵɵnextContext(4);
|
|
399
416
|
i0.ɵɵadvance(19);
|
|
400
417
|
i0.ɵɵrepeater(ctx_r1.Channels);
|
|
401
418
|
} }
|
|
402
|
-
function
|
|
403
|
-
i0.ɵɵelementStart(0, "div",
|
|
404
|
-
i0.ɵɵconditionalCreate(1,
|
|
419
|
+
function MJAIAgentSessionFormComponentExtended_Conditional_0_Conditional_100_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
420
|
+
i0.ɵɵelementStart(0, "div", 57);
|
|
421
|
+
i0.ɵɵconditionalCreate(1, MJAIAgentSessionFormComponentExtended_Conditional_0_Conditional_100_Conditional_1_Conditional_1_Template, 1, 0, "mj-empty-state", 76)(2, MJAIAgentSessionFormComponentExtended_Conditional_0_Conditional_100_Conditional_1_Conditional_2_Template, 21, 0, "div", 77);
|
|
405
422
|
i0.ɵɵelementEnd();
|
|
406
423
|
} if (rf & 2) {
|
|
407
424
|
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
408
425
|
i0.ɵɵadvance();
|
|
409
426
|
i0.ɵɵconditional(ctx_r1.Channels.length === 0 ? 1 : 2);
|
|
410
427
|
} }
|
|
411
|
-
function
|
|
412
|
-
i0.ɵɵelement(0, "mj-empty-state",
|
|
428
|
+
function MJAIAgentSessionFormComponentExtended_Conditional_0_Conditional_100_Conditional_2_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
429
|
+
i0.ɵɵelement(0, "mj-empty-state", 86);
|
|
413
430
|
} }
|
|
414
|
-
function
|
|
415
|
-
i0.ɵɵelement(0, "i",
|
|
431
|
+
function MJAIAgentSessionFormComponentExtended_Conditional_0_Conditional_100_Conditional_2_Conditional_2_For_2_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
432
|
+
i0.ɵɵelement(0, "i", 91);
|
|
416
433
|
} }
|
|
417
|
-
function
|
|
418
|
-
i0.ɵɵelement(0, "i",
|
|
434
|
+
function MJAIAgentSessionFormComponentExtended_Conditional_0_Conditional_100_Conditional_2_Conditional_2_For_2_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
435
|
+
i0.ɵɵelement(0, "i", 92);
|
|
419
436
|
} }
|
|
420
|
-
function
|
|
421
|
-
i0.ɵɵelement(0, "i",
|
|
437
|
+
function MJAIAgentSessionFormComponentExtended_Conditional_0_Conditional_100_Conditional_2_Conditional_2_For_2_Conditional_4_Template(rf, ctx) { if (rf & 1) {
|
|
438
|
+
i0.ɵɵelement(0, "i", 64);
|
|
422
439
|
} }
|
|
423
|
-
function
|
|
440
|
+
function MJAIAgentSessionFormComponentExtended_Conditional_0_Conditional_100_Conditional_2_Conditional_2_For_2_Conditional_7_Template(rf, ctx) { if (rf & 1) {
|
|
424
441
|
i0.ɵɵtext(0);
|
|
425
442
|
} if (rf & 2) {
|
|
426
|
-
const
|
|
427
|
-
i0.ɵɵtextInterpolate1(" ",
|
|
443
|
+
const turn_r13 = i0.ɵɵnextContext().$implicit;
|
|
444
|
+
i0.ɵɵtextInterpolate1(" ", turn_r13.User || "User", " ");
|
|
428
445
|
} }
|
|
429
|
-
function
|
|
446
|
+
function MJAIAgentSessionFormComponentExtended_Conditional_0_Conditional_100_Conditional_2_Conditional_2_For_2_Conditional_8_Template(rf, ctx) { if (rf & 1) {
|
|
430
447
|
i0.ɵɵtext(0);
|
|
431
448
|
} if (rf & 2) {
|
|
432
|
-
const
|
|
433
|
-
i0.ɵɵtextInterpolate1(" ",
|
|
449
|
+
const turn_r13 = i0.ɵɵnextContext().$implicit;
|
|
450
|
+
i0.ɵɵtextInterpolate1(" ", turn_r13.Agent || "Agent", " ");
|
|
434
451
|
} }
|
|
435
|
-
function
|
|
436
|
-
i0.ɵɵelementStart(0, "div",
|
|
437
|
-
i0.ɵɵconditionalCreate(2,
|
|
452
|
+
function MJAIAgentSessionFormComponentExtended_Conditional_0_Conditional_100_Conditional_2_Conditional_2_For_2_Template(rf, ctx) { if (rf & 1) {
|
|
453
|
+
i0.ɵɵelementStart(0, "div", 89)(1, "div", 90);
|
|
454
|
+
i0.ɵɵconditionalCreate(2, MJAIAgentSessionFormComponentExtended_Conditional_0_Conditional_100_Conditional_2_Conditional_2_For_2_Conditional_2_Template, 1, 0, "i", 91)(3, MJAIAgentSessionFormComponentExtended_Conditional_0_Conditional_100_Conditional_2_Conditional_2_For_2_Conditional_3_Template, 1, 0, "i", 92)(4, MJAIAgentSessionFormComponentExtended_Conditional_0_Conditional_100_Conditional_2_Conditional_2_For_2_Conditional_4_Template, 1, 0, "i", 64);
|
|
438
455
|
i0.ɵɵelementEnd();
|
|
439
|
-
i0.ɵɵelementStart(5, "div",
|
|
440
|
-
i0.ɵɵconditionalCreate(7,
|
|
441
|
-
i0.ɵɵelementStart(9, "span",
|
|
456
|
+
i0.ɵɵelementStart(5, "div", 93)(6, "div", 94);
|
|
457
|
+
i0.ɵɵconditionalCreate(7, MJAIAgentSessionFormComponentExtended_Conditional_0_Conditional_100_Conditional_2_Conditional_2_For_2_Conditional_7_Template, 1, 1)(8, MJAIAgentSessionFormComponentExtended_Conditional_0_Conditional_100_Conditional_2_Conditional_2_For_2_Conditional_8_Template, 1, 1);
|
|
458
|
+
i0.ɵɵelementStart(9, "span", 95);
|
|
442
459
|
i0.ɵɵtext(10);
|
|
443
460
|
i0.ɵɵpipe(11, "date");
|
|
444
461
|
i0.ɵɵelementEnd()();
|
|
445
|
-
i0.ɵɵelementStart(12, "div",
|
|
462
|
+
i0.ɵɵelementStart(12, "div", 96);
|
|
446
463
|
i0.ɵɵtext(13);
|
|
447
464
|
i0.ɵɵelementEnd()()();
|
|
448
465
|
} if (rf & 2) {
|
|
449
|
-
const
|
|
450
|
-
i0.ɵɵclassProp("turn--user",
|
|
466
|
+
const turn_r13 = ctx.$implicit;
|
|
467
|
+
i0.ɵɵclassProp("turn--user", turn_r13.Role === "User")("turn--error", turn_r13.Role === "Error");
|
|
451
468
|
i0.ɵɵadvance(2);
|
|
452
|
-
i0.ɵɵconditional(
|
|
469
|
+
i0.ɵɵconditional(turn_r13.Role === "User" ? 2 : turn_r13.Role === "Error" ? 3 : 4);
|
|
453
470
|
i0.ɵɵadvance(5);
|
|
454
|
-
i0.ɵɵconditional(
|
|
471
|
+
i0.ɵɵconditional(turn_r13.Role === "User" ? 7 : 8);
|
|
455
472
|
i0.ɵɵadvance(3);
|
|
456
|
-
i0.ɵɵtextInterpolate(i0.ɵɵpipeBind2(11, 8,
|
|
473
|
+
i0.ɵɵtextInterpolate(i0.ɵɵpipeBind2(11, 8, turn_r13.__mj_CreatedAt, "h:mm:ss a"));
|
|
457
474
|
i0.ɵɵadvance(3);
|
|
458
|
-
i0.ɵɵtextInterpolate(
|
|
475
|
+
i0.ɵɵtextInterpolate(turn_r13.Message);
|
|
459
476
|
} }
|
|
460
|
-
function
|
|
461
|
-
i0.ɵɵelementStart(0, "div",
|
|
462
|
-
i0.ɵɵrepeaterCreate(1,
|
|
477
|
+
function MJAIAgentSessionFormComponentExtended_Conditional_0_Conditional_100_Conditional_2_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
478
|
+
i0.ɵɵelementStart(0, "div", 87);
|
|
479
|
+
i0.ɵɵrepeaterCreate(1, MJAIAgentSessionFormComponentExtended_Conditional_0_Conditional_100_Conditional_2_Conditional_2_For_2_Template, 14, 11, "div", 88, _forTrack2);
|
|
463
480
|
i0.ɵɵelementEnd();
|
|
464
481
|
} if (rf & 2) {
|
|
465
482
|
const ctx_r1 = i0.ɵɵnextContext(4);
|
|
466
483
|
i0.ɵɵadvance();
|
|
467
484
|
i0.ɵɵrepeater(ctx_r1.Transcript);
|
|
468
485
|
} }
|
|
469
|
-
function
|
|
470
|
-
i0.ɵɵelementStart(0, "div",
|
|
471
|
-
i0.ɵɵconditionalCreate(1,
|
|
486
|
+
function MJAIAgentSessionFormComponentExtended_Conditional_0_Conditional_100_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
487
|
+
i0.ɵɵelementStart(0, "div", 57);
|
|
488
|
+
i0.ɵɵconditionalCreate(1, MJAIAgentSessionFormComponentExtended_Conditional_0_Conditional_100_Conditional_2_Conditional_1_Template, 1, 0, "mj-empty-state", 86)(2, MJAIAgentSessionFormComponentExtended_Conditional_0_Conditional_100_Conditional_2_Conditional_2_Template, 3, 0, "div", 87);
|
|
472
489
|
i0.ɵɵelementEnd();
|
|
473
490
|
} if (rf & 2) {
|
|
474
491
|
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
475
492
|
i0.ɵɵadvance();
|
|
476
493
|
i0.ɵɵconditional(ctx_r1.Transcript.length === 0 ? 1 : 2);
|
|
477
494
|
} }
|
|
478
|
-
function
|
|
479
|
-
i0.ɵɵelement(0, "i",
|
|
495
|
+
function MJAIAgentSessionFormComponentExtended_Conditional_0_Conditional_100_Conditional_3_ng_template_2_Template(rf, ctx) { if (rf & 1) {
|
|
496
|
+
i0.ɵɵelement(0, "i", 43);
|
|
480
497
|
i0.ɵɵtext(1, " Session Record ");
|
|
481
498
|
} }
|
|
482
|
-
function
|
|
483
|
-
const
|
|
484
|
-
i0.ɵɵelementStart(0, "a",
|
|
485
|
-
i0.ɵɵlistener("click", function
|
|
499
|
+
function MJAIAgentSessionFormComponentExtended_Conditional_0_Conditional_100_Conditional_3_Conditional_25_Template(rf, ctx) { if (rf & 1) {
|
|
500
|
+
const _r15 = i0.ɵɵgetCurrentView();
|
|
501
|
+
i0.ɵɵelementStart(0, "a", 53);
|
|
502
|
+
i0.ɵɵlistener("click", function MJAIAgentSessionFormComponentExtended_Conditional_0_Conditional_100_Conditional_3_Conditional_25_Template_a_click_0_listener() { i0.ɵɵrestoreView(_r15); const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.OpenEntityRecord("MJ: Conversations", ctx_r1.record.ConversationID)); });
|
|
486
503
|
i0.ɵɵtext(1);
|
|
487
504
|
i0.ɵɵelementEnd();
|
|
488
505
|
} if (rf & 2) {
|
|
@@ -490,15 +507,15 @@ function MJAIAgentSessionFormComponentExtended_Conditional_0_Conditional_98_Cond
|
|
|
490
507
|
i0.ɵɵadvance();
|
|
491
508
|
i0.ɵɵtextInterpolate1(" ", ctx_r1.record.Conversation || ctx_r1.record.ConversationID, " ");
|
|
492
509
|
} }
|
|
493
|
-
function
|
|
510
|
+
function MJAIAgentSessionFormComponentExtended_Conditional_0_Conditional_100_Conditional_3_Conditional_26_Template(rf, ctx) { if (rf & 1) {
|
|
494
511
|
i0.ɵɵelementStart(0, "span");
|
|
495
512
|
i0.ɵɵtext(1, "N/A");
|
|
496
513
|
i0.ɵɵelementEnd();
|
|
497
514
|
} }
|
|
498
|
-
function
|
|
499
|
-
const
|
|
500
|
-
i0.ɵɵelementStart(0, "a",
|
|
501
|
-
i0.ɵɵlistener("click", function
|
|
515
|
+
function MJAIAgentSessionFormComponentExtended_Conditional_0_Conditional_100_Conditional_3_Conditional_36_Template(rf, ctx) { if (rf & 1) {
|
|
516
|
+
const _r16 = i0.ɵɵgetCurrentView();
|
|
517
|
+
i0.ɵɵelementStart(0, "a", 53);
|
|
518
|
+
i0.ɵɵlistener("click", function MJAIAgentSessionFormComponentExtended_Conditional_0_Conditional_100_Conditional_3_Conditional_36_Template_a_click_0_listener() { i0.ɵɵrestoreView(_r16); const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.OpenEntityRecord("MJ: AI Agent Sessions", ctx_r1.record.LastSessionID)); });
|
|
502
519
|
i0.ɵɵtext(1);
|
|
503
520
|
i0.ɵɵelementEnd();
|
|
504
521
|
} if (rf & 2) {
|
|
@@ -506,20 +523,20 @@ function MJAIAgentSessionFormComponentExtended_Conditional_0_Conditional_98_Cond
|
|
|
506
523
|
i0.ɵɵadvance();
|
|
507
524
|
i0.ɵɵtextInterpolate1(" ", ctx_r1.record.LastSessionID, " ");
|
|
508
525
|
} }
|
|
509
|
-
function
|
|
526
|
+
function MJAIAgentSessionFormComponentExtended_Conditional_0_Conditional_100_Conditional_3_Conditional_37_Template(rf, ctx) { if (rf & 1) {
|
|
510
527
|
i0.ɵɵelementStart(0, "span");
|
|
511
528
|
i0.ɵɵtext(1, "None (root)");
|
|
512
529
|
i0.ɵɵelementEnd();
|
|
513
530
|
} }
|
|
514
|
-
function
|
|
515
|
-
i0.ɵɵelement(0, "i",
|
|
531
|
+
function MJAIAgentSessionFormComponentExtended_Conditional_0_Conditional_100_Conditional_3_Conditional_55_ng_template_1_Template(rf, ctx) { if (rf & 1) {
|
|
532
|
+
i0.ɵɵelement(0, "i", 104);
|
|
516
533
|
i0.ɵɵtext(1, " Config (Session State JSON) ");
|
|
517
534
|
} }
|
|
518
|
-
function
|
|
519
|
-
i0.ɵɵelementStart(0, "mj-accordion-panel",
|
|
520
|
-
i0.ɵɵtemplate(1,
|
|
521
|
-
i0.ɵɵelementStart(2, "div",
|
|
522
|
-
i0.ɵɵelement(3, "mj-code-editor",
|
|
535
|
+
function MJAIAgentSessionFormComponentExtended_Conditional_0_Conditional_100_Conditional_3_Conditional_55_Template(rf, ctx) { if (rf & 1) {
|
|
536
|
+
i0.ɵɵelementStart(0, "mj-accordion-panel", 97);
|
|
537
|
+
i0.ɵɵtemplate(1, MJAIAgentSessionFormComponentExtended_Conditional_0_Conditional_100_Conditional_3_Conditional_55_ng_template_1_Template, 2, 0, "ng-template", 98);
|
|
538
|
+
i0.ɵɵelementStart(2, "div", 102);
|
|
539
|
+
i0.ɵɵelement(3, "mj-code-editor", 103);
|
|
523
540
|
i0.ɵɵelementEnd()();
|
|
524
541
|
} if (rf & 2) {
|
|
525
542
|
const ctx_r1 = i0.ɵɵnextContext(4);
|
|
@@ -527,69 +544,69 @@ function MJAIAgentSessionFormComponentExtended_Conditional_0_Conditional_98_Cond
|
|
|
527
544
|
i0.ɵɵadvance(3);
|
|
528
545
|
i0.ɵɵproperty("ngModel", ctx_r1.PrettyConfig)("language", "json")("readonly", true);
|
|
529
546
|
} }
|
|
530
|
-
function
|
|
531
|
-
const
|
|
532
|
-
i0.ɵɵelementStart(0, "div",
|
|
533
|
-
i0.ɵɵtemplate(2,
|
|
534
|
-
i0.ɵɵelementStart(3, "div",
|
|
547
|
+
function MJAIAgentSessionFormComponentExtended_Conditional_0_Conditional_100_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
548
|
+
const _r14 = i0.ɵɵgetCurrentView();
|
|
549
|
+
i0.ɵɵelementStart(0, "div", 57)(1, "mj-accordion-panel", 97);
|
|
550
|
+
i0.ɵɵtemplate(2, MJAIAgentSessionFormComponentExtended_Conditional_0_Conditional_100_Conditional_3_ng_template_2_Template, 2, 0, "ng-template", 98);
|
|
551
|
+
i0.ɵɵelementStart(3, "div", 99)(4, "div", 100)(5, "label");
|
|
535
552
|
i0.ɵɵtext(6, "ID");
|
|
536
553
|
i0.ɵɵelementEnd();
|
|
537
|
-
i0.ɵɵelementStart(7, "span",
|
|
554
|
+
i0.ɵɵelementStart(7, "span", 84);
|
|
538
555
|
i0.ɵɵtext(8);
|
|
539
556
|
i0.ɵɵelementEnd()();
|
|
540
|
-
i0.ɵɵelementStart(9, "div",
|
|
557
|
+
i0.ɵɵelementStart(9, "div", 100)(10, "label");
|
|
541
558
|
i0.ɵɵtext(11, "Agent (Co-Agent)");
|
|
542
559
|
i0.ɵɵelementEnd();
|
|
543
|
-
i0.ɵɵelementStart(12, "span")(13, "a",
|
|
544
|
-
i0.ɵɵlistener("click", function
|
|
560
|
+
i0.ɵɵelementStart(12, "span")(13, "a", 53);
|
|
561
|
+
i0.ɵɵlistener("click", function MJAIAgentSessionFormComponentExtended_Conditional_0_Conditional_100_Conditional_3_Template_a_click_13_listener() { i0.ɵɵrestoreView(_r14); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.OpenEntityRecord("AI Agents", ctx_r1.record.AgentID)); });
|
|
545
562
|
i0.ɵɵtext(14);
|
|
546
563
|
i0.ɵɵelementEnd()()();
|
|
547
|
-
i0.ɵɵelementStart(15, "div",
|
|
564
|
+
i0.ɵɵelementStart(15, "div", 100)(16, "label");
|
|
548
565
|
i0.ɵɵtext(17, "User");
|
|
549
566
|
i0.ɵɵelementEnd();
|
|
550
|
-
i0.ɵɵelementStart(18, "span")(19, "a",
|
|
551
|
-
i0.ɵɵlistener("click", function
|
|
567
|
+
i0.ɵɵelementStart(18, "span")(19, "a", 53);
|
|
568
|
+
i0.ɵɵlistener("click", function MJAIAgentSessionFormComponentExtended_Conditional_0_Conditional_100_Conditional_3_Template_a_click_19_listener() { i0.ɵɵrestoreView(_r14); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.OpenEntityRecord("Users", ctx_r1.record.UserID)); });
|
|
552
569
|
i0.ɵɵtext(20);
|
|
553
570
|
i0.ɵɵelementEnd()()();
|
|
554
|
-
i0.ɵɵelementStart(21, "div",
|
|
571
|
+
i0.ɵɵelementStart(21, "div", 100)(22, "label");
|
|
555
572
|
i0.ɵɵtext(23, "Conversation");
|
|
556
573
|
i0.ɵɵelementEnd();
|
|
557
574
|
i0.ɵɵelementStart(24, "span");
|
|
558
|
-
i0.ɵɵconditionalCreate(25,
|
|
575
|
+
i0.ɵɵconditionalCreate(25, MJAIAgentSessionFormComponentExtended_Conditional_0_Conditional_100_Conditional_3_Conditional_25_Template, 2, 1, "a", 30)(26, MJAIAgentSessionFormComponentExtended_Conditional_0_Conditional_100_Conditional_3_Conditional_26_Template, 2, 0, "span");
|
|
559
576
|
i0.ɵɵelementEnd()();
|
|
560
|
-
i0.ɵɵelementStart(27, "div",
|
|
577
|
+
i0.ɵɵelementStart(27, "div", 100)(28, "label");
|
|
561
578
|
i0.ɵɵtext(29, "Status");
|
|
562
579
|
i0.ɵɵelementEnd();
|
|
563
|
-
i0.ɵɵelementStart(30, "span",
|
|
580
|
+
i0.ɵɵelementStart(30, "span", 101);
|
|
564
581
|
i0.ɵɵtext(31);
|
|
565
582
|
i0.ɵɵelementEnd()();
|
|
566
|
-
i0.ɵɵelementStart(32, "div",
|
|
583
|
+
i0.ɵɵelementStart(32, "div", 100)(33, "label");
|
|
567
584
|
i0.ɵɵtext(34, "Prior Session");
|
|
568
585
|
i0.ɵɵelementEnd();
|
|
569
586
|
i0.ɵɵelementStart(35, "span");
|
|
570
|
-
i0.ɵɵconditionalCreate(36,
|
|
587
|
+
i0.ɵɵconditionalCreate(36, MJAIAgentSessionFormComponentExtended_Conditional_0_Conditional_100_Conditional_3_Conditional_36_Template, 2, 1, "a", 30)(37, MJAIAgentSessionFormComponentExtended_Conditional_0_Conditional_100_Conditional_3_Conditional_37_Template, 2, 0, "span");
|
|
571
588
|
i0.ɵɵelementEnd()();
|
|
572
|
-
i0.ɵɵelementStart(38, "div",
|
|
589
|
+
i0.ɵɵelementStart(38, "div", 100)(39, "label");
|
|
573
590
|
i0.ɵɵtext(40, "Host Instance");
|
|
574
591
|
i0.ɵɵelementEnd();
|
|
575
|
-
i0.ɵɵelementStart(41, "span",
|
|
592
|
+
i0.ɵɵelementStart(41, "span", 84);
|
|
576
593
|
i0.ɵɵtext(42);
|
|
577
594
|
i0.ɵɵelementEnd()();
|
|
578
|
-
i0.ɵɵelementStart(43, "div",
|
|
595
|
+
i0.ɵɵelementStart(43, "div", 100)(44, "label");
|
|
579
596
|
i0.ɵɵtext(45, "Last Active At");
|
|
580
597
|
i0.ɵɵelementEnd();
|
|
581
598
|
i0.ɵɵelementStart(46, "span");
|
|
582
599
|
i0.ɵɵtext(47);
|
|
583
600
|
i0.ɵɵpipe(48, "date");
|
|
584
601
|
i0.ɵɵelementEnd()();
|
|
585
|
-
i0.ɵɵelementStart(49, "div",
|
|
602
|
+
i0.ɵɵelementStart(49, "div", 100)(50, "label");
|
|
586
603
|
i0.ɵɵtext(51, "Closed At");
|
|
587
604
|
i0.ɵɵelementEnd();
|
|
588
605
|
i0.ɵɵelementStart(52, "span");
|
|
589
606
|
i0.ɵɵtext(53);
|
|
590
607
|
i0.ɵɵpipe(54, "date");
|
|
591
608
|
i0.ɵɵelementEnd()()()();
|
|
592
|
-
i0.ɵɵconditionalCreate(55,
|
|
609
|
+
i0.ɵɵconditionalCreate(55, MJAIAgentSessionFormComponentExtended_Conditional_0_Conditional_100_Conditional_3_Conditional_55_Template, 4, 4, "mj-accordion-panel", 97);
|
|
593
610
|
i0.ɵɵelementEnd();
|
|
594
611
|
} if (rf & 2) {
|
|
595
612
|
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
@@ -618,11 +635,11 @@ function MJAIAgentSessionFormComponentExtended_Conditional_0_Conditional_98_Cond
|
|
|
618
635
|
i0.ɵɵadvance(2);
|
|
619
636
|
i0.ɵɵconditional(ctx_r1.record.Config_ ? 55 : -1);
|
|
620
637
|
} }
|
|
621
|
-
function
|
|
622
|
-
i0.ɵɵconditionalCreate(0,
|
|
623
|
-
i0.ɵɵconditionalCreate(1,
|
|
624
|
-
i0.ɵɵconditionalCreate(2,
|
|
625
|
-
i0.ɵɵconditionalCreate(3,
|
|
638
|
+
function MJAIAgentSessionFormComponentExtended_Conditional_0_Conditional_100_Template(rf, ctx) { if (rf & 1) {
|
|
639
|
+
i0.ɵɵconditionalCreate(0, MJAIAgentSessionFormComponentExtended_Conditional_0_Conditional_100_Conditional_0_Template, 3, 1, "div", 57);
|
|
640
|
+
i0.ɵɵconditionalCreate(1, MJAIAgentSessionFormComponentExtended_Conditional_0_Conditional_100_Conditional_1_Template, 3, 1, "div", 57);
|
|
641
|
+
i0.ɵɵconditionalCreate(2, MJAIAgentSessionFormComponentExtended_Conditional_0_Conditional_100_Conditional_2_Template, 3, 1, "div", 57);
|
|
642
|
+
i0.ɵɵconditionalCreate(3, MJAIAgentSessionFormComponentExtended_Conditional_0_Conditional_100_Conditional_3_Template, 56, 18, "div", 57);
|
|
626
643
|
} if (rf & 2) {
|
|
627
644
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
628
645
|
i0.ɵɵconditional(ctx_r1.ActiveTab === "runs" ? 0 : -1);
|
|
@@ -718,37 +735,44 @@ function MJAIAgentSessionFormComponentExtended_Conditional_0_Template(rf, ctx) {
|
|
|
718
735
|
i0.ɵɵelementEnd();
|
|
719
736
|
i0.ɵɵelementStart(76, "div", 29);
|
|
720
737
|
i0.ɵɵconditionalCreate(77, MJAIAgentSessionFormComponentExtended_Conditional_0_Conditional_77_Template, 2, 0, "a", 30)(78, MJAIAgentSessionFormComponentExtended_Conditional_0_Conditional_78_Template, 2, 0, "span", 31);
|
|
721
|
-
i0.ɵɵelementEnd()()()()
|
|
722
|
-
i0.ɵɵ
|
|
723
|
-
i0.ɵɵ
|
|
724
|
-
i0.ɵɵ
|
|
725
|
-
i0.ɵɵ
|
|
726
|
-
i0.ɵɵ
|
|
727
|
-
i0.ɵɵ
|
|
728
|
-
i0.ɵɵ
|
|
729
|
-
i0.ɵɵ
|
|
730
|
-
i0.ɵɵ
|
|
731
|
-
i0.ɵɵ
|
|
732
|
-
i0.ɵɵ
|
|
733
|
-
i0.ɵɵ
|
|
734
|
-
i0.ɵɵ
|
|
735
|
-
i0.ɵɵ
|
|
736
|
-
i0.ɵɵ
|
|
737
|
-
i0.ɵɵ
|
|
738
|
-
i0.ɵɵ
|
|
739
|
-
i0.ɵɵ
|
|
740
|
-
i0.ɵɵ
|
|
741
|
-
i0.ɵɵ
|
|
742
|
-
i0.ɵɵ
|
|
743
|
-
i0.ɵɵ
|
|
738
|
+
i0.ɵɵelementEnd()()()();
|
|
739
|
+
i0.ɵɵconditionalCreate(79, MJAIAgentSessionFormComponentExtended_Conditional_0_Conditional_79_Template, 4, 2, "button", 35);
|
|
740
|
+
i0.ɵɵelementEnd();
|
|
741
|
+
i0.ɵɵelementStart(80, "mj-section-picker", 36);
|
|
742
|
+
i0.ɵɵlistener("ActiveKeyChange", function MJAIAgentSessionFormComponentExtended_Conditional_0_Template_mj_section_picker_ActiveKeyChange_80_listener($event) { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.OnSectionPicked($event)); });
|
|
743
|
+
i0.ɵɵelementEnd();
|
|
744
|
+
i0.ɵɵelementStart(81, "div", 37)(82, "button", 38);
|
|
745
|
+
i0.ɵɵlistener("click", function MJAIAgentSessionFormComponentExtended_Conditional_0_Template_button_click_82_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.ChangeTab("runs")); });
|
|
746
|
+
i0.ɵɵelement(83, "i", 39);
|
|
747
|
+
i0.ɵɵtext(84, " Runs ");
|
|
748
|
+
i0.ɵɵconditionalCreate(85, MJAIAgentSessionFormComponentExtended_Conditional_0_Conditional_85_Template, 2, 1, "span", 40);
|
|
749
|
+
i0.ɵɵelementEnd();
|
|
750
|
+
i0.ɵɵelementStart(86, "button", 38);
|
|
751
|
+
i0.ɵɵlistener("click", function MJAIAgentSessionFormComponentExtended_Conditional_0_Template_button_click_86_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.ChangeTab("channels")); });
|
|
752
|
+
i0.ɵɵelement(87, "i", 41);
|
|
753
|
+
i0.ɵɵtext(88, " Channels ");
|
|
754
|
+
i0.ɵɵconditionalCreate(89, MJAIAgentSessionFormComponentExtended_Conditional_0_Conditional_89_Template, 2, 1, "span", 40);
|
|
755
|
+
i0.ɵɵelementEnd();
|
|
756
|
+
i0.ɵɵelementStart(90, "button", 38);
|
|
757
|
+
i0.ɵɵlistener("click", function MJAIAgentSessionFormComponentExtended_Conditional_0_Template_button_click_90_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.ChangeTab("transcript")); });
|
|
758
|
+
i0.ɵɵelement(91, "i", 42);
|
|
759
|
+
i0.ɵɵtext(92, " Transcript ");
|
|
760
|
+
i0.ɵɵconditionalCreate(93, MJAIAgentSessionFormComponentExtended_Conditional_0_Conditional_93_Template, 2, 1, "span", 40);
|
|
761
|
+
i0.ɵɵelementEnd();
|
|
762
|
+
i0.ɵɵelementStart(94, "button", 38);
|
|
763
|
+
i0.ɵɵlistener("click", function MJAIAgentSessionFormComponentExtended_Conditional_0_Template_button_click_94_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.ChangeTab("details")); });
|
|
764
|
+
i0.ɵɵelement(95, "i", 43);
|
|
765
|
+
i0.ɵɵtext(96, " Details ");
|
|
744
766
|
i0.ɵɵelementEnd()();
|
|
745
|
-
i0.ɵɵelementStart(
|
|
746
|
-
i0.ɵɵconditionalCreate(
|
|
767
|
+
i0.ɵɵelementStart(97, "div", 44);
|
|
768
|
+
i0.ɵɵconditionalCreate(98, MJAIAgentSessionFormComponentExtended_Conditional_0_Conditional_98_Template, 1, 0, "mj-loading", 45)(99, MJAIAgentSessionFormComponentExtended_Conditional_0_Conditional_99_Template, 1, 1, "mj-empty-state", 46)(100, MJAIAgentSessionFormComponentExtended_Conditional_0_Conditional_100_Template, 4, 4);
|
|
747
769
|
i0.ɵɵelementEnd()()();
|
|
748
770
|
} if (rf & 2) {
|
|
749
771
|
const ctx_r1 = i0.ɵɵnextContext();
|
|
750
772
|
i0.ɵɵproperty("Record", ctx_r1.record)("FormComponent", ctx_r1)("ToolbarConfig", ctx_r1.ToolbarConfig)("WidthMode", "full-width");
|
|
751
|
-
i0.ɵɵadvance(
|
|
773
|
+
i0.ɵɵadvance(2);
|
|
774
|
+
i0.ɵɵclassProp("hero-view", !ctx_r1.EditMode)("hero-compact", !ctx_r1.EditMode && !ctx_r1.HeroDetailsOpen);
|
|
775
|
+
i0.ɵɵadvance(9);
|
|
752
776
|
i0.ɵɵconditional(ctx_r1.record.AgentID ? 11 : -1);
|
|
753
777
|
i0.ɵɵadvance();
|
|
754
778
|
i0.ɵɵconditional(ctx_r1.TargetAgentID ? 12 : -1);
|
|
@@ -767,7 +791,7 @@ function MJAIAgentSessionFormComponentExtended_Conditional_0_Template(rf, ctx) {
|
|
|
767
791
|
i0.ɵɵadvance();
|
|
768
792
|
i0.ɵɵtextInterpolate(ctx_r1.record.User);
|
|
769
793
|
i0.ɵɵadvance(5);
|
|
770
|
-
i0.ɵɵtextInterpolate(i0.ɵɵpipeBind2(35,
|
|
794
|
+
i0.ɵɵtextInterpolate(i0.ɵɵpipeBind2(35, 43, ctx_r1.record.__mj_CreatedAt, "medium"));
|
|
771
795
|
i0.ɵɵadvance(2);
|
|
772
796
|
i0.ɵɵconditional(ctx_r1.record.ClosedAt ? 36 : 37);
|
|
773
797
|
i0.ɵɵadvance(6);
|
|
@@ -786,22 +810,26 @@ function MJAIAgentSessionFormComponentExtended_Conditional_0_Template(rf, ctx) {
|
|
|
786
810
|
i0.ɵɵtextInterpolate(ctx_r1.record.HostInstanceID || "\u2014");
|
|
787
811
|
i0.ɵɵadvance(7);
|
|
788
812
|
i0.ɵɵconditional(ctx_r1.record.LastSessionID ? 77 : 78);
|
|
789
|
-
i0.ɵɵadvance(
|
|
813
|
+
i0.ɵɵadvance(2);
|
|
814
|
+
i0.ɵɵconditional(!ctx_r1.EditMode && ctx_r1.HeroSummary ? 79 : -1);
|
|
815
|
+
i0.ɵɵadvance();
|
|
816
|
+
i0.ɵɵproperty("Items", ctx_r1.SectionPickerItems)("ActiveKey", ctx_r1.ActiveTab);
|
|
817
|
+
i0.ɵɵadvance(2);
|
|
790
818
|
i0.ɵɵclassProp("active", ctx_r1.ActiveTab === "runs");
|
|
791
819
|
i0.ɵɵadvance(3);
|
|
792
|
-
i0.ɵɵconditional(ctx_r1.RunTree.length > 0 ?
|
|
820
|
+
i0.ɵɵconditional(ctx_r1.RunTree.length > 0 ? 85 : -1);
|
|
793
821
|
i0.ɵɵadvance();
|
|
794
822
|
i0.ɵɵclassProp("active", ctx_r1.ActiveTab === "channels");
|
|
795
823
|
i0.ɵɵadvance(3);
|
|
796
|
-
i0.ɵɵconditional(ctx_r1.Channels.length > 0 ?
|
|
824
|
+
i0.ɵɵconditional(ctx_r1.Channels.length > 0 ? 89 : -1);
|
|
797
825
|
i0.ɵɵadvance();
|
|
798
826
|
i0.ɵɵclassProp("active", ctx_r1.ActiveTab === "transcript");
|
|
799
827
|
i0.ɵɵadvance(3);
|
|
800
|
-
i0.ɵɵconditional(ctx_r1.Transcript.length > 0 ?
|
|
828
|
+
i0.ɵɵconditional(ctx_r1.Transcript.length > 0 ? 93 : -1);
|
|
801
829
|
i0.ɵɵadvance();
|
|
802
830
|
i0.ɵɵclassProp("active", ctx_r1.ActiveTab === "details");
|
|
803
831
|
i0.ɵɵadvance(4);
|
|
804
|
-
i0.ɵɵconditional(ctx_r1.Loading ?
|
|
832
|
+
i0.ɵɵconditional(ctx_r1.Loading ? 98 : ctx_r1.LoadError ? 99 : 100);
|
|
805
833
|
} }
|
|
806
834
|
/**
|
|
807
835
|
* Custom form for 'MJ: AI Agent Sessions' — the observability surface for
|
|
@@ -812,6 +840,8 @@ function MJAIAgentSessionFormComponentExtended_Conditional_0_Template(rf, ctx) {
|
|
|
812
840
|
let MJAIAgentSessionFormComponentExtended = class MJAIAgentSessionFormComponentExtended extends MJAIAgentSessionFormComponent {
|
|
813
841
|
constructor() {
|
|
814
842
|
super(...arguments);
|
|
843
|
+
/** Phone hero (6A): whether the summary line is expanded to show the rest of the hero. */
|
|
844
|
+
this.HeroDetailsOpen = false;
|
|
815
845
|
/** Hide the generated-section controls — this form has a fully custom layout. */
|
|
816
846
|
this.ToolbarConfig = CUSTOM_LAYOUT_TOOLBAR_CONFIG;
|
|
817
847
|
// UI state
|
|
@@ -833,6 +863,22 @@ let MJAIAgentSessionFormComponentExtended = class MJAIAgentSessionFormComponentE
|
|
|
833
863
|
this.navigationService = inject(NavigationService);
|
|
834
864
|
this.appManager = inject(ApplicationManager);
|
|
835
865
|
}
|
|
866
|
+
static { MJAIAgentSessionFormComponentExtended_1 = this; }
|
|
867
|
+
/** Toggles the phone hero between its compact identity row and the full hero. */
|
|
868
|
+
ToggleHeroDetails() {
|
|
869
|
+
this.HeroDetailsOpen = !this.HeroDetailsOpen;
|
|
870
|
+
this.cdr.markForCheck();
|
|
871
|
+
}
|
|
872
|
+
/** The phone hero's one-line summary of what the compact hero leaves out. */
|
|
873
|
+
get HeroSummary() {
|
|
874
|
+
const agent = this.TargetAgentName ? `${this.record.Agent} → ${this.TargetAgentName}` : this.record.Agent;
|
|
875
|
+
return JoinHeroSummary([
|
|
876
|
+
agent,
|
|
877
|
+
this.SessionDuration,
|
|
878
|
+
CountLabel(this.Channels.length, 'channel'),
|
|
879
|
+
this.DelegatedRunCount > 0 ? CountLabel(this.DelegatedRunCount, 'delegated run') : null,
|
|
880
|
+
]);
|
|
881
|
+
}
|
|
836
882
|
/** Sessions read best full-width, like the agent-run form. */
|
|
837
883
|
getDefaultFormWidthMode() { return 'full-width'; }
|
|
838
884
|
/** Custom-layout form owns its entire body; suppress auto-filled relationship sections. */
|
|
@@ -1039,6 +1085,23 @@ let MJAIAgentSessionFormComponentExtended = class MJAIAgentSessionFormComponentE
|
|
|
1039
1085
|
ChangeTab(tab) {
|
|
1040
1086
|
this.ActiveTab = tab;
|
|
1041
1087
|
}
|
|
1088
|
+
/** The tab strip as `mj-section-picker` items: strip order, a count only where the tab has rows. */
|
|
1089
|
+
get SectionPickerItems() {
|
|
1090
|
+
const count = (n) => (n > 0 ? n : null);
|
|
1091
|
+
return [
|
|
1092
|
+
{ Key: 'runs', Title: 'Runs', Icon: 'fas fa-diagram-project', Count: count(this.RunTree.length) },
|
|
1093
|
+
{ Key: 'channels', Title: 'Channels', Icon: 'fas fa-plug', Count: count(this.Channels.length) },
|
|
1094
|
+
{ Key: 'transcript', Title: 'Transcript', Icon: 'fas fa-comments', Count: count(this.Transcript.length) },
|
|
1095
|
+
{ Key: 'details', Title: 'Details', Icon: 'fas fa-info-circle', Count: null },
|
|
1096
|
+
];
|
|
1097
|
+
}
|
|
1098
|
+
/** A pick from the phone section sheet; goes through ChangeTab. An unknown key is ignored. */
|
|
1099
|
+
OnSectionPicked(key) {
|
|
1100
|
+
const tab = MJAIAgentSessionFormComponentExtended_1.phoneTabs.find((t) => t === key);
|
|
1101
|
+
if (tab)
|
|
1102
|
+
this.ChangeTab(tab);
|
|
1103
|
+
}
|
|
1104
|
+
static { this.phoneTabs = ['runs', 'channels', 'transcript', 'details']; }
|
|
1042
1105
|
GetStatusIcon(status) {
|
|
1043
1106
|
switch (status) {
|
|
1044
1107
|
case 'Active': return 'fa-tower-broadcast';
|
|
@@ -1154,19 +1217,19 @@ let MJAIAgentSessionFormComponentExtended = class MJAIAgentSessionFormComponentE
|
|
|
1154
1217
|
});
|
|
1155
1218
|
}
|
|
1156
1219
|
static { this.ɵfac = /*@__PURE__*/ (() => { let ɵMJAIAgentSessionFormComponentExtended_BaseFactory; return function MJAIAgentSessionFormComponentExtended_Factory(__ngFactoryType__) { return (ɵMJAIAgentSessionFormComponentExtended_BaseFactory || (ɵMJAIAgentSessionFormComponentExtended_BaseFactory = i0.ɵɵgetInheritedFactory(MJAIAgentSessionFormComponentExtended)))(__ngFactoryType__ || MJAIAgentSessionFormComponentExtended); }; })(); }
|
|
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,
|
|
1220
|
+
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", "phone-hero"], [1, "header-content"], [1, "header-left"], [1, "icon-wrapper"], [1, "fas", "fa-tower-broadcast"], [1, "header-info"], [1, "meta-info", "phone-hero-detail"], [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", "phone-hero-detail"], ["title", "Refresh", 1, "btn-icon", 3, "click"], [1, "fas", "fa-sync-alt"], [1, "header-stats", "phone-hero-detail", "phone-hero-stats"], [1, "stat"], [1, "label"], [1, "value"], ["href", "javascript:void(0)", "FieldName", "UserID", 1, "entity-link", 3, "click", "mjRecordLink", "HandleClick"], [1, "configuration-bar", "phone-hero-detail"], [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"], ["type", "button", 1, "phone-hero-summary"], [1, "phone-section-picker", 3, "ActiveKeyChange", "Items", "ActiveKey"], [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"], ["type", "button", 1, "phone-hero-summary", 3, "click"], [1, "phone-hero-summary-text"], ["aria-hidden", "true", 1, "fa-solid", "fa-chevron-down"], [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) {
|
|
1221
|
+
i0.ɵɵconditionalCreate(0, MJAIAgentSessionFormComponentExtended_Conditional_0_Template, 101, 46, "mj-record-form-container", 0);
|
|
1159
1222
|
} if (rf & 2) {
|
|
1160
1223
|
i0.ɵɵconditional(ctx.record ? 0 : -1);
|
|
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}"] }); }
|
|
1224
|
+
} }, dependencies: [i1.NgClass, i2.NgControlStatus, i2.NgModel, i3.MJEmptyStateComponent, i3.MJSectionPickerComponent, 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}\n\n\n.phone-section-picker[_ngcontent-%COMP%] {\n display: none;\n}\n\n\n\n@media (max-width: 768px) {\n .tabs[_ngcontent-%COMP%] {\n display: none;\n }\n\n .phone-section-picker[_ngcontent-%COMP%] {\n display: block;\n flex-shrink: 0;\n padding: 4px 8px;\n border-bottom: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface-sunken);\n }\n\n .header.phone-hero.hero-view[_ngcontent-%COMP%] .header-content[_ngcontent-%COMP%] {\n flex-direction: row;\n align-items: center;\n gap: 10px;\n }\n\n .header.phone-hero.hero-view[_ngcontent-%COMP%] .header-left[_ngcontent-%COMP%] {\n flex: 1 1 auto;\n min-width: 0;\n }\n}", "\n\n\n\n\n\n\n\n\n\n\n\n\n\n.phone-hero-summary[_ngcontent-%COMP%], \n.phone-hero-only[_ngcontent-%COMP%] {\n display: none;\n}\n\n@media (max-width: 768px) {\n .phone-hero[_ngcontent-%COMP%] {\n padding: 12px !important;\n }\n\n \n .phone-hero.hero-compact[_ngcontent-%COMP%] .phone-hero-detail[_ngcontent-%COMP%], \n .phone-hero.hero-view[_ngcontent-%COMP%] .phone-hero-hide[_ngcontent-%COMP%] {\n display: none !important;\n }\n\n .phone-hero-only[_ngcontent-%COMP%] {\n display: inline-flex;\n }\n\n \n .phone-hero[_ngcontent-%COMP%] .phone-hero-stats[_ngcontent-%COMP%] {\n display: grid !important;\n grid-template-columns: repeat(2, minmax(0, 1fr));\n gap: 8px;\n }\n\n .phone-hero-status[_ngcontent-%COMP%] {\n align-items: center;\n gap: 4px;\n margin-left: 8px;\n padding: 2px 8px;\n border-radius: var(--mj-radius-full, 999px);\n color: var(--mj-text-secondary);\n background: var(--mj-bg-surface-sunken);\n font-size: var(--mj-text-xs);\n font-weight: var(--mj-font-semibold);\n vertical-align: middle;\n white-space: nowrap;\n }\n\n \n .phone-hero-status[data-status=\"running\"][_ngcontent-%COMP%] { color: var(--mj-status-warning-text); background: var(--mj-status-warning-bg); }\n .phone-hero-status[data-status=\"success\"][_ngcontent-%COMP%] { color: var(--mj-status-success-text); background: var(--mj-status-success-bg); }\n .phone-hero-status[data-status=\"error\"][_ngcontent-%COMP%] { color: var(--mj-status-error-text); background: var(--mj-status-error-bg); }\n .phone-hero-status[data-status=\"info\"][_ngcontent-%COMP%] { color: var(--mj-status-info-text); background: var(--mj-status-info-bg); }\n\n .phone-hero-top[_ngcontent-%COMP%] {\n flex-direction: column;\n align-items: stretch;\n gap: 10px;\n }\n\n .phone-hero-actions[_ngcontent-%COMP%] {\n width: 100%;\n }\n\n .phone-hero[_ngcontent-%COMP%] .phone-hero-run[_ngcontent-%COMP%] {\n width: 100%;\n min-height: 44px;\n justify-content: center;\n }\n\n \n\n .phone-hero-summary[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n width: 100%;\n min-height: 44px;\n margin-top: 8px;\n padding: 0 4px;\n border: 0;\n border-top: 1px solid color-mix(in srgb, currentColor 20%, transparent);\n background: transparent;\n color: inherit;\n font: inherit;\n font-size: var(--mj-text-sm);\n text-align: left;\n cursor: pointer;\n opacity: 0.85;\n }\n\n .phone-hero-summary[_ngcontent-%COMP%]:focus-visible {\n outline: none;\n box-shadow: var(--mj-focus-ring);\n }\n\n .phone-hero-summary-text[_ngcontent-%COMP%] {\n flex: 1 1 auto;\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n\n .phone-hero-summary[_ngcontent-%COMP%] > i[_ngcontent-%COMP%] {\n flex-shrink: 0;\n transition: transform 0.15s ease;\n }\n\n .phone-hero-summary[aria-expanded=\"true\"][_ngcontent-%COMP%] > i[_ngcontent-%COMP%] {\n transform: rotate(180deg);\n }\n}\n\n@media (prefers-reduced-motion: reduce) {\n .phone-hero-summary[_ngcontent-%COMP%] > i[_ngcontent-%COMP%] {\n transition: none;\n }\n}"] }); }
|
|
1162
1225
|
};
|
|
1163
|
-
MJAIAgentSessionFormComponentExtended = __decorate([
|
|
1226
|
+
MJAIAgentSessionFormComponentExtended = MJAIAgentSessionFormComponentExtended_1 = __decorate([
|
|
1164
1227
|
RegisterClass(BaseFormComponent, 'MJ: AI Agent Sessions')
|
|
1165
1228
|
], MJAIAgentSessionFormComponentExtended);
|
|
1166
1229
|
export { MJAIAgentSessionFormComponentExtended };
|
|
1167
1230
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(MJAIAgentSessionFormComponentExtended, [{
|
|
1168
1231
|
type: Component,
|
|
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"] }]
|
|
1232
|
+
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 phone-hero\" [class.hero-view]=\"!EditMode\" [class.hero-compact]=\"!EditMode && !HeroDetailsOpen\">\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 phone-hero-detail\">\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 phone-hero-detail\">\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 phone-hero-detail phone-hero-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 phone-hero-detail\">\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 @if (!EditMode && HeroSummary) {\n <button type=\"button\" class=\"phone-hero-summary\" [attr.aria-expanded]=\"HeroDetailsOpen\" (click)=\"ToggleHeroDetails()\">\n <span class=\"phone-hero-summary-text\">{{ HeroSummary }}</span>\n <i class=\"fa-solid fa-chevron-down\" aria-hidden=\"true\"></i>\n </button>\n }\n </div>\n\n <!-- Phone: the strip becomes one button that opens the Sections sheet -->\n <mj-section-picker class=\"phone-section-picker\"\n [Items]=\"SectionPickerItems\"\n [ActiveKey]=\"ActiveTab\"\n (ActiveKeyChange)=\"OnSectionPicked($event)\"></mj-section-picker>\n\n <!-- Tabs -->\n <div class=\"tabs\">\n <button class=\"tab\" [class.active]=\"ActiveTab === '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\n/* Phone section picker: hidden until the 768px rule swaps it in for the tab strip */\n.phone-section-picker {\n display: none;\n}\n\n/* Phone (375px): the tab strip becomes one section-picker button (same pattern as the other\n forms), and the 6A hero keeps the status beside the title on one identity row. */\n@media (max-width: 768px) {\n .tabs {\n display: none;\n }\n\n .phone-section-picker {\n display: block;\n flex-shrink: 0;\n padding: 4px 8px;\n border-bottom: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface-sunken);\n }\n\n .header.phone-hero.hero-view .header-content {\n flex-direction: row;\n align-items: center;\n gap: 10px;\n }\n\n .header.phone-hero.hero-view .header-left {\n flex: 1 1 auto;\n min-width: 0;\n }\n}\n", "/* ============================================\n PHONE HERO (design call 6A), shared by the custom forms that own a hero.\n Under 768px the hero keeps icon, name, status and the primary action. Anything tagged\n .phone-hero-detail hides while the hero is compact and comes back when the summary line is\n tapped. Edit mode is untouched: the host only gets .hero-compact / .hero-view in view mode.\n Host: .phone-hero [class.hero-view]=\"!EditMode\" [class.hero-compact]=\"!EditMode && !HeroDetailsOpen\"\n Tags: .phone-hero-detail hidden while compact\n .phone-hero-hide hidden in view mode (said elsewhere on the phone hero)\n .phone-hero-only shown only on phones\n .phone-hero-top a title + action row that stacks\n .phone-hero-actions / .phone-hero-run the primary action, full width at 44px\n .phone-hero-stats a metric row that reflows to a 2-up grid when the hero is expanded\n .phone-hero-status a status chip in the identity row (with .phone-hero-only)\n ============================================ */\n.phone-hero-summary,\n.phone-hero-only {\n display: none;\n}\n\n@media (max-width: 768px) {\n .phone-hero {\n padding: 12px !important;\n }\n\n /* !important: several heroes carry inline display/padding styles on these rows */\n .phone-hero.hero-compact .phone-hero-detail,\n .phone-hero.hero-view .phone-hero-hide {\n display: none !important;\n }\n\n .phone-hero-only {\n display: inline-flex;\n }\n\n /* Lower specificity than the compact rule above, so a compact hero still hides it */\n .phone-hero .phone-hero-stats {\n display: grid !important;\n grid-template-columns: repeat(2, minmax(0, 1fr));\n gap: 8px;\n }\n\n .phone-hero-status {\n align-items: center;\n gap: 4px;\n margin-left: 8px;\n padding: 2px 8px;\n border-radius: var(--mj-radius-full, 999px);\n color: var(--mj-text-secondary);\n background: var(--mj-bg-surface-sunken);\n font-size: var(--mj-text-xs);\n font-weight: var(--mj-font-semibold);\n vertical-align: middle;\n white-space: nowrap;\n }\n\n /* data-status comes from RunStatusKind(); the -text / -bg pairs keep contrast in both themes */\n .phone-hero-status[data-status=\"running\"] { color: var(--mj-status-warning-text); background: var(--mj-status-warning-bg); }\n .phone-hero-status[data-status=\"success\"] { color: var(--mj-status-success-text); background: var(--mj-status-success-bg); }\n .phone-hero-status[data-status=\"error\"] { color: var(--mj-status-error-text); background: var(--mj-status-error-bg); }\n .phone-hero-status[data-status=\"info\"] { color: var(--mj-status-info-text); background: var(--mj-status-info-bg); }\n\n .phone-hero-top {\n flex-direction: column;\n align-items: stretch;\n gap: 10px;\n }\n\n .phone-hero-actions {\n width: 100%;\n }\n\n .phone-hero .phone-hero-run {\n width: 100%;\n min-height: 44px;\n justify-content: center;\n }\n\n /* Inherits the hero's text colour, so it reads on light heroes and on the brand-blue\n Queries hero alike; a muted token would be grey on blue. */\n .phone-hero-summary {\n display: flex;\n align-items: center;\n gap: 8px;\n width: 100%;\n min-height: 44px;\n margin-top: 8px;\n padding: 0 4px;\n border: 0;\n border-top: 1px solid color-mix(in srgb, currentColor 20%, transparent);\n background: transparent;\n color: inherit;\n font: inherit;\n font-size: var(--mj-text-sm);\n text-align: left;\n cursor: pointer;\n opacity: 0.85;\n }\n\n .phone-hero-summary:focus-visible {\n outline: none;\n box-shadow: var(--mj-focus-ring);\n }\n\n .phone-hero-summary-text {\n flex: 1 1 auto;\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n\n .phone-hero-summary > i {\n flex-shrink: 0;\n transition: transform 0.15s ease;\n }\n\n .phone-hero-summary[aria-expanded=\"true\"] > i {\n transform: rotate(180deg);\n }\n}\n\n@media (prefers-reduced-motion: reduce) {\n .phone-hero-summary > i {\n transition: none;\n }\n}\n"] }]
|
|
1170
1233
|
}], null, null); })();
|
|
1171
|
-
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(MJAIAgentSessionFormComponentExtended, { className: "MJAIAgentSessionFormComponentExtended", filePath: "src/lib/custom/AIAgentSessions/ai-agent-session-form.component.ts", lineNumber:
|
|
1234
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(MJAIAgentSessionFormComponentExtended, { className: "MJAIAgentSessionFormComponentExtended", filePath: "src/lib/custom/AIAgentSessions/ai-agent-session-form.component.ts", lineNumber: 120 }); })();
|
|
1172
1235
|
//# sourceMappingURL=ai-agent-session-form.component.js.map
|