@memberjunction/ng-core-entity-forms 5.22.0 → 5.23.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/dist/lib/custom/AIAgents/add-action-dialog.component.d.ts +4 -5
- package/dist/lib/custom/AIAgents/add-action-dialog.component.d.ts.map +1 -1
- package/dist/lib/custom/AIAgents/add-action-dialog.component.js +55 -59
- package/dist/lib/custom/AIAgents/add-action-dialog.component.js.map +1 -1
- package/dist/lib/custom/AIAgents/agent-advanced-settings-dialog.component.js +0 -1
- package/dist/lib/custom/AIAgents/agent-advanced-settings-dialog.component.js.map +1 -1
- package/dist/lib/custom/AIAgents/agent-prompt-advanced-settings-dialog.component.d.ts +4 -5
- package/dist/lib/custom/AIAgents/agent-prompt-advanced-settings-dialog.component.d.ts.map +1 -1
- package/dist/lib/custom/AIAgents/agent-prompt-advanced-settings-dialog.component.js +54 -71
- package/dist/lib/custom/AIAgents/agent-prompt-advanced-settings-dialog.component.js.map +1 -1
- package/dist/lib/custom/AIAgents/ai-agent-form.component.d.ts.map +1 -1
- package/dist/lib/custom/AIAgents/ai-agent-form.component.js +1053 -1096
- package/dist/lib/custom/AIAgents/ai-agent-form.component.js.map +1 -1
- package/dist/lib/custom/AIAgents/ai-agent-management.service.d.ts +2 -3
- package/dist/lib/custom/AIAgents/ai-agent-management.service.d.ts.map +1 -1
- package/dist/lib/custom/AIAgents/ai-agent-management.service.js +39 -82
- package/dist/lib/custom/AIAgents/ai-agent-management.service.js.map +1 -1
- package/dist/lib/custom/AIAgents/create-prompt-dialog.component.d.ts +4 -5
- package/dist/lib/custom/AIAgents/create-prompt-dialog.component.d.ts.map +1 -1
- package/dist/lib/custom/AIAgents/create-prompt-dialog.component.js +28 -31
- package/dist/lib/custom/AIAgents/create-prompt-dialog.component.js.map +1 -1
- package/dist/lib/custom/AIAgents/create-sub-agent-dialog.component.d.ts +4 -5
- package/dist/lib/custom/AIAgents/create-sub-agent-dialog.component.d.ts.map +1 -1
- package/dist/lib/custom/AIAgents/create-sub-agent-dialog.component.js +15 -14
- package/dist/lib/custom/AIAgents/create-sub-agent-dialog.component.js.map +1 -1
- package/dist/lib/custom/AIAgents/new-agent-dialog.component.d.ts +4 -7
- package/dist/lib/custom/AIAgents/new-agent-dialog.component.d.ts.map +1 -1
- package/dist/lib/custom/AIAgents/new-agent-dialog.component.js +77 -124
- package/dist/lib/custom/AIAgents/new-agent-dialog.component.js.map +1 -1
- package/dist/lib/custom/AIAgents/new-agent-dialog.service.d.ts +2 -2
- package/dist/lib/custom/AIAgents/new-agent-dialog.service.d.ts.map +1 -1
- package/dist/lib/custom/AIAgents/new-agent-dialog.service.js +10 -11
- package/dist/lib/custom/AIAgents/new-agent-dialog.service.js.map +1 -1
- package/dist/lib/custom/AIAgents/prompt-selector-dialog.component.d.ts +4 -5
- package/dist/lib/custom/AIAgents/prompt-selector-dialog.component.d.ts.map +1 -1
- package/dist/lib/custom/AIAgents/prompt-selector-dialog.component.js +18 -18
- package/dist/lib/custom/AIAgents/prompt-selector-dialog.component.js.map +1 -1
- package/dist/lib/custom/AIAgents/sub-agent-advanced-settings-dialog.component.d.ts +4 -5
- package/dist/lib/custom/AIAgents/sub-agent-advanced-settings-dialog.component.d.ts.map +1 -1
- package/dist/lib/custom/AIAgents/sub-agent-advanced-settings-dialog.component.js +59 -80
- package/dist/lib/custom/AIAgents/sub-agent-advanced-settings-dialog.component.js.map +1 -1
- package/dist/lib/custom/AIAgents/sub-agent-selector-dialog.component.d.ts +4 -5
- package/dist/lib/custom/AIAgents/sub-agent-selector-dialog.component.d.ts.map +1 -1
- package/dist/lib/custom/AIAgents/sub-agent-selector-dialog.component.js +23 -24
- package/dist/lib/custom/AIAgents/sub-agent-selector-dialog.component.js.map +1 -1
- 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 +862 -906
- package/dist/lib/custom/AIPromptRuns/ai-prompt-run-form.component.js.map +1 -1
- package/dist/lib/custom/AIPromptRuns/chat-message-viewer.component.js +4 -5
- package/dist/lib/custom/AIPromptRuns/chat-message-viewer.component.js.map +1 -1
- package/dist/lib/custom/AIPrompts/ai-prompt-form.component.js +448 -499
- package/dist/lib/custom/AIPrompts/ai-prompt-form.component.js.map +1 -1
- package/dist/lib/custom/AIPrompts/ai-prompt-management.service.d.ts +2 -2
- package/dist/lib/custom/AIPrompts/ai-prompt-management.service.d.ts.map +1 -1
- package/dist/lib/custom/AIPrompts/ai-prompt-management.service.js +6 -11
- package/dist/lib/custom/AIPrompts/ai-prompt-management.service.js.map +1 -1
- package/dist/lib/custom/AIPrompts/template-selector-dialog.component.d.ts +4 -5
- package/dist/lib/custom/AIPrompts/template-selector-dialog.component.d.ts.map +1 -1
- package/dist/lib/custom/AIPrompts/template-selector-dialog.component.js +16 -15
- package/dist/lib/custom/AIPrompts/template-selector-dialog.component.js.map +1 -1
- package/dist/lib/custom/Actions/action-execution-log-form.component.js +160 -166
- package/dist/lib/custom/Actions/action-execution-log-form.component.js.map +1 -1
- package/dist/lib/custom/Actions/action-form.component.d.ts.map +1 -1
- package/dist/lib/custom/Actions/action-form.component.js +93 -94
- package/dist/lib/custom/Actions/action-form.component.js.map +1 -1
- package/dist/lib/custom/Entities/entity-form.component.js +2 -2
- package/dist/lib/custom/Lists/list-form.component.js +61 -63
- package/dist/lib/custom/Lists/list-form.component.js.map +1 -1
- package/dist/lib/custom/Queries/query-category-dialog.component.js +33 -59
- package/dist/lib/custom/Queries/query-category-dialog.component.js.map +1 -1
- package/dist/lib/custom/Queries/query-form.component.js +354 -360
- package/dist/lib/custom/Queries/query-form.component.js.map +1 -1
- package/dist/lib/custom/Queries/query-run-dialog.component.js +62 -71
- package/dist/lib/custom/Queries/query-run-dialog.component.js.map +1 -1
- package/dist/lib/custom/Templates/template-param-dialog.component.js +128 -124
- package/dist/lib/custom/Templates/template-param-dialog.component.js.map +1 -1
- package/dist/lib/custom/Templates/template-params-grid.component.d.ts +45 -22
- package/dist/lib/custom/Templates/template-params-grid.component.d.ts.map +1 -1
- package/dist/lib/custom/Templates/template-params-grid.component.js +380 -384
- package/dist/lib/custom/Templates/template-params-grid.component.js.map +1 -1
- package/dist/lib/custom/Templates/templates-form.component.js +34 -36
- package/dist/lib/custom/Templates/templates-form.component.js.map +1 -1
- package/dist/lib/custom/Tests/test-form.component.js +8 -9
- package/dist/lib/custom/Tests/test-form.component.js.map +1 -1
- package/dist/lib/custom/Tests/test-run-feedback-form.component.js +4 -4
- package/dist/lib/custom/Tests/test-run-feedback-form.component.js.map +1 -1
- package/dist/lib/custom/Tests/test-run-form.component.js +7 -7
- package/dist/lib/custom/Tests/test-run-form.component.js.map +1 -1
- package/dist/lib/custom/Tests/test-suite-form.component.js +6 -7
- package/dist/lib/custom/Tests/test-suite-form.component.js.map +1 -1
- package/dist/lib/custom/Tests/test-suite-run-form.component.js +6 -7
- package/dist/lib/custom/Tests/test-suite-run-form.component.js.map +1 -1
- package/dist/lib/custom/ai-agent-run/ai-agent-run-analytics.component.js +381 -409
- package/dist/lib/custom/ai-agent-run/ai-agent-run-analytics.component.js.map +1 -1
- package/dist/lib/custom/ai-agent-run/ai-agent-run-data.service.d.ts.map +1 -1
- package/dist/lib/custom/ai-agent-run/ai-agent-run-data.service.js +1 -1
- package/dist/lib/custom/ai-agent-run/ai-agent-run-data.service.js.map +1 -1
- package/dist/lib/custom/ai-agent-run/ai-agent-run-timeline.component.d.ts.map +1 -1
- package/dist/lib/custom/ai-agent-run/ai-agent-run-timeline.component.js +74 -63
- package/dist/lib/custom/ai-agent-run/ai-agent-run-timeline.component.js.map +1 -1
- package/dist/lib/custom/ai-agent-run/ai-agent-run-visualization.component.js +10 -10
- package/dist/lib/custom/ai-agent-run/ai-agent-run-visualization.component.js.map +1 -1
- 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 +352 -332
- package/dist/lib/custom/ai-agent-run/ai-agent-run.component.js.map +1 -1
- package/dist/lib/custom/custom-forms.module.d.ts +22 -27
- package/dist/lib/custom/custom-forms.module.d.ts.map +1 -1
- package/dist/lib/custom/custom-forms.module.js +51 -81
- package/dist/lib/custom/custom-forms.module.js.map +1 -1
- package/dist/lib/custom/shared/entity-selector-dialog.component.d.ts +4 -5
- package/dist/lib/custom/shared/entity-selector-dialog.component.d.ts.map +1 -1
- package/dist/lib/custom/shared/entity-selector-dialog.component.js +59 -66
- package/dist/lib/custom/shared/entity-selector-dialog.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJAIAgent/mjaiagent.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJAIAgent/mjaiagent.form.component.js +176 -156
- package/dist/lib/generated/Entities/MJAIAgent/mjaiagent.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJAIAgentClientTool/mjaiagentclienttool.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/MJAIAgentClientTool/mjaiagentclienttool.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/MJAIAgentClientTool/mjaiagentclienttool.form.component.js +65 -0
- package/dist/lib/generated/Entities/MJAIAgentClientTool/mjaiagentclienttool.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/MJAIClientToolDefinition/mjaiclienttooldefinition.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/MJAIClientToolDefinition/mjaiclienttooldefinition.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/MJAIClientToolDefinition/mjaiclienttooldefinition.form.component.js +89 -0
- package/dist/lib/generated/Entities/MJAIClientToolDefinition/mjaiclienttooldefinition.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/MJAIModel/mjaimodel.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJAIModel/mjaimodel.form.component.js +80 -44
- package/dist/lib/generated/Entities/MJAIModel/mjaimodel.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJContentItemTag/mjcontentitemtag.form.component.js +11 -8
- package/dist/lib/generated/Entities/MJContentItemTag/mjcontentitemtag.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJContentSource/mjcontentsource.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJContentSource/mjcontentsource.form.component.js +39 -24
- package/dist/lib/generated/Entities/MJContentSource/mjcontentsource.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJContentType/mjcontenttype.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJContentType/mjcontenttype.form.component.js +35 -17
- package/dist/lib/generated/Entities/MJContentType/mjcontenttype.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJDuplicateRunDetail/mjduplicaterundetail.form.component.js +15 -13
- package/dist/lib/generated/Entities/MJDuplicateRunDetail/mjduplicaterundetail.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJDuplicateRunDetailMatch/mjduplicaterundetailmatch.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJDuplicateRunDetailMatch/mjduplicaterundetailmatch.form.component.js +7 -9
- package/dist/lib/generated/Entities/MJDuplicateRunDetailMatch/mjduplicaterundetailmatch.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJEntityField/mjentityfield.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJEntityField/mjentityfield.form.component.js +21 -9
- package/dist/lib/generated/Entities/MJEntityField/mjentityfield.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJVectorIndex/mjvectorindex.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJVectorIndex/mjvectorindex.form.component.js +41 -5
- package/dist/lib/generated/Entities/MJVectorIndex/mjvectorindex.form.component.js.map +1 -1
- package/dist/lib/generated/generated-forms.module.d.ts +280 -279
- package/dist/lib/generated/generated-forms.module.d.ts.map +1 -1
- package/dist/lib/generated/generated-forms.module.js +102 -142
- package/dist/lib/generated/generated-forms.module.js.map +1 -1
- package/dist/lib/shared/components/template-editor.component.js +14 -15
- package/dist/lib/shared/components/template-editor.component.js.map +1 -1
- package/package.json +34 -41
|
@@ -21,13 +21,14 @@ import { ApplicationManager } from '@memberjunction/ng-base-application';
|
|
|
21
21
|
import * as i0 from "@angular/core";
|
|
22
22
|
import * as i1 from "@angular/common";
|
|
23
23
|
import * as i2 from "@angular/forms";
|
|
24
|
-
import * as i3 from "@
|
|
24
|
+
import * as i3 from "@memberjunction/ng-ui-components";
|
|
25
25
|
import * as i4 from "@memberjunction/ng-code-editor";
|
|
26
26
|
import * as i5 from "@memberjunction/ng-deep-diff";
|
|
27
|
-
import * as i6 from "
|
|
28
|
-
import * as i7 from "./ai-agent-run-
|
|
29
|
-
import * as i8 from "./ai-agent-run-
|
|
30
|
-
import * as i9 from "./ai-agent-run-
|
|
27
|
+
import * as i6 from "angular-split";
|
|
28
|
+
import * as i7 from "./ai-agent-run-timeline.component";
|
|
29
|
+
import * as i8 from "./ai-agent-run-analytics.component";
|
|
30
|
+
import * as i9 from "./ai-agent-run-visualization.component";
|
|
31
|
+
import * as i10 from "./ai-agent-run-step-detail.component";
|
|
31
32
|
function MJAIAgentRunFormComponentExtended_Conditional_6_Template(rf, ctx) { if (rf & 1) {
|
|
32
33
|
i0.ɵɵelement(0, "img", 8);
|
|
33
34
|
} if (rf & 2) {
|
|
@@ -199,34 +200,42 @@ function MJAIAgentRunFormComponentExtended_Conditional_38_Template(rf, ctx) { if
|
|
|
199
200
|
i0.ɵɵadvance(8);
|
|
200
201
|
i0.ɵɵtextInterpolate1(" ", ctx_r0.record.Configuration || "Unknown", " ");
|
|
201
202
|
} }
|
|
203
|
+
function MJAIAgentRunFormComponentExtended_Conditional_53_Conditional_4_Template(rf, ctx) { if (rf & 1) {
|
|
204
|
+
const _r7 = i0.ɵɵgetCurrentView();
|
|
205
|
+
i0.ɵɵelementStart(0, "as-split-area", 50)(1, "mj-ai-agent-run-step-detail", 52);
|
|
206
|
+
i0.ɵɵlistener("closePanel", function MJAIAgentRunFormComponentExtended_Conditional_53_Conditional_4_Template_mj_ai_agent_run_step_detail_closePanel_1_listener() { i0.ɵɵrestoreView(_r7); const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.closeJsonPanel()); })("navigateToActionLog", function MJAIAgentRunFormComponentExtended_Conditional_53_Conditional_4_Template_mj_ai_agent_run_step_detail_navigateToActionLog_1_listener($event) { i0.ɵɵrestoreView(_r7); const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.navigateToActionLog($event)); })("copyToClipboard", function MJAIAgentRunFormComponentExtended_Conditional_53_Conditional_4_Template_mj_ai_agent_run_step_detail_copyToClipboard_1_listener($event) { i0.ɵɵrestoreView(_r7); const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.copyToClipboard($event)); });
|
|
207
|
+
i0.ɵɵelementEnd()();
|
|
208
|
+
} if (rf & 2) {
|
|
209
|
+
const ctx_r0 = i0.ɵɵnextContext(2);
|
|
210
|
+
i0.ɵɵproperty("size", 45);
|
|
211
|
+
i0.ɵɵadvance();
|
|
212
|
+
i0.ɵɵproperty("selectedTimelineItem", ctx_r0.selectedTimelineItem);
|
|
213
|
+
} }
|
|
202
214
|
function MJAIAgentRunFormComponentExtended_Conditional_53_Template(rf, ctx) { if (rf & 1) {
|
|
203
215
|
const _r6 = i0.ɵɵgetCurrentView();
|
|
204
|
-
i0.ɵɵelementStart(0, "div", 34)(1, "
|
|
216
|
+
i0.ɵɵelementStart(0, "div", 34)(1, "as-split", 49)(2, "as-split-area", 50)(3, "mj-ai-agent-run-timeline", 51);
|
|
205
217
|
i0.ɵɵlistener("itemSelected", function MJAIAgentRunFormComponentExtended_Conditional_53_Template_mj_ai_agent_run_timeline_itemSelected_3_listener($event) { i0.ɵɵrestoreView(_r6); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.selectTimelineItem($event)); })("navigateToEntity", function MJAIAgentRunFormComponentExtended_Conditional_53_Template_mj_ai_agent_run_timeline_navigateToEntity_3_listener($event) { i0.ɵɵrestoreView(_r6); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.navigateToEntityRecord($event)); })("agentRunCompleted", function MJAIAgentRunFormComponentExtended_Conditional_53_Template_mj_ai_agent_run_timeline_agentRunCompleted_3_listener($event) { i0.ɵɵrestoreView(_r6); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.onAgentRunCompleted($event)); });
|
|
206
218
|
i0.ɵɵelementEnd()();
|
|
207
|
-
i0.ɵɵ
|
|
208
|
-
i0.ɵɵ
|
|
209
|
-
i0.ɵɵelementEnd()()()();
|
|
219
|
+
i0.ɵɵconditionalCreate(4, MJAIAgentRunFormComponentExtended_Conditional_53_Conditional_4_Template, 2, 2, "as-split-area", 50);
|
|
220
|
+
i0.ɵɵelementEnd()();
|
|
210
221
|
} if (rf & 2) {
|
|
211
222
|
const ctx_r0 = i0.ɵɵnextContext();
|
|
212
223
|
i0.ɵɵadvance(2);
|
|
213
|
-
i0.ɵɵproperty("
|
|
224
|
+
i0.ɵɵproperty("size", ctx_r0.selectedTimelineItem ? 55 : 100);
|
|
214
225
|
i0.ɵɵadvance();
|
|
215
226
|
i0.ɵɵproperty("aiAgentRunId", ctx_r0.record.ID)("dataHelper", ctx_r0.dataHelper)("autoRefresh", ctx_r0.record.Status === "Running")("refreshInterval", 30000);
|
|
216
227
|
i0.ɵɵadvance();
|
|
217
|
-
i0.ɵɵ
|
|
218
|
-
i0.ɵɵadvance();
|
|
219
|
-
i0.ɵɵproperty("selectedTimelineItem", ctx_r0.selectedTimelineItem);
|
|
228
|
+
i0.ɵɵconditional(ctx_r0.selectedTimelineItem ? 4 : -1);
|
|
220
229
|
} }
|
|
221
230
|
function MJAIAgentRunFormComponentExtended_Conditional_54_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
222
|
-
i0.ɵɵelement(0, "mj-ai-agent-run-visualization",
|
|
231
|
+
i0.ɵɵelement(0, "mj-ai-agent-run-visualization", 53, 0);
|
|
223
232
|
} if (rf & 2) {
|
|
224
233
|
const ctx_r0 = i0.ɵɵnextContext(2);
|
|
225
234
|
i0.ɵɵproperty("aiAgentRunId", ctx_r0.record.ID)("dataHelper", ctx_r0.dataHelper);
|
|
226
235
|
} }
|
|
227
236
|
function MJAIAgentRunFormComponentExtended_Conditional_54_Template(rf, ctx) { if (rf & 1) {
|
|
228
237
|
i0.ɵɵelementStart(0, "div", 34);
|
|
229
|
-
i0.ɵɵconditionalCreate(1, MJAIAgentRunFormComponentExtended_Conditional_54_Conditional_1_Template, 2, 2, "mj-ai-agent-run-visualization",
|
|
238
|
+
i0.ɵɵconditionalCreate(1, MJAIAgentRunFormComponentExtended_Conditional_54_Conditional_1_Template, 2, 2, "mj-ai-agent-run-visualization", 53);
|
|
230
239
|
i0.ɵɵelementEnd();
|
|
231
240
|
} if (rf & 2) {
|
|
232
241
|
const ctx_r0 = i0.ɵɵnextContext();
|
|
@@ -234,489 +243,499 @@ function MJAIAgentRunFormComponentExtended_Conditional_54_Template(rf, ctx) { if
|
|
|
234
243
|
i0.ɵɵconditional(ctx_r0.visualizationLoaded ? 1 : -1);
|
|
235
244
|
} }
|
|
236
245
|
function MJAIAgentRunFormComponentExtended_Conditional_55_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
237
|
-
i0.ɵɵelement(0, "mj-ai-agent-run-analytics",
|
|
246
|
+
i0.ɵɵelement(0, "mj-ai-agent-run-analytics", 54, 1);
|
|
238
247
|
} if (rf & 2) {
|
|
239
248
|
const ctx_r0 = i0.ɵɵnextContext(2);
|
|
240
249
|
i0.ɵɵproperty("agentRunId", ctx_r0.record.ID);
|
|
241
250
|
} }
|
|
242
251
|
function MJAIAgentRunFormComponentExtended_Conditional_55_Template(rf, ctx) { if (rf & 1) {
|
|
243
252
|
i0.ɵɵelementStart(0, "div", 34);
|
|
244
|
-
i0.ɵɵconditionalCreate(1, MJAIAgentRunFormComponentExtended_Conditional_55_Conditional_1_Template, 2, 1, "mj-ai-agent-run-analytics",
|
|
253
|
+
i0.ɵɵconditionalCreate(1, MJAIAgentRunFormComponentExtended_Conditional_55_Conditional_1_Template, 2, 1, "mj-ai-agent-run-analytics", 54);
|
|
245
254
|
i0.ɵɵelementEnd();
|
|
246
255
|
} if (rf & 2) {
|
|
247
256
|
const ctx_r0 = i0.ɵɵnextContext();
|
|
248
257
|
i0.ɵɵadvance();
|
|
249
258
|
i0.ɵɵconditional(ctx_r0.analyticsLoaded ? 1 : -1);
|
|
250
259
|
} }
|
|
251
|
-
function
|
|
252
|
-
|
|
260
|
+
function MJAIAgentRunFormComponentExtended_Conditional_56_ng_template_2_Template(rf, ctx) { if (rf & 1) {
|
|
261
|
+
i0.ɵɵelement(0, "i", 32);
|
|
262
|
+
i0.ɵɵtext(1, " General Information ");
|
|
263
|
+
} }
|
|
264
|
+
function MJAIAgentRunFormComponentExtended_Conditional_56_Conditional_14_Template(rf, ctx) { if (rf & 1) {
|
|
265
|
+
const _r9 = i0.ɵɵgetCurrentView();
|
|
253
266
|
i0.ɵɵelementStart(0, "a", 36);
|
|
254
|
-
i0.ɵɵlistener("click", function
|
|
267
|
+
i0.ɵɵlistener("click", function MJAIAgentRunFormComponentExtended_Conditional_56_Conditional_14_Template_a_click_0_listener() { i0.ɵɵrestoreView(_r9); const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.openEntityRecord("MJ: AI Agent Runs", ctx_r0.record.ParentRunID)); });
|
|
255
268
|
i0.ɵɵtext(1);
|
|
256
269
|
i0.ɵɵelementEnd();
|
|
257
270
|
} if (rf & 2) {
|
|
258
|
-
const ctx_r0 = i0.ɵɵnextContext(
|
|
271
|
+
const ctx_r0 = i0.ɵɵnextContext(2);
|
|
259
272
|
i0.ɵɵadvance();
|
|
260
273
|
i0.ɵɵtextInterpolate1(" ", ctx_r0.record.ParentRunID, " ");
|
|
261
274
|
} }
|
|
262
|
-
function
|
|
275
|
+
function MJAIAgentRunFormComponentExtended_Conditional_56_Conditional_15_Template(rf, ctx) { if (rf & 1) {
|
|
263
276
|
i0.ɵɵelementStart(0, "span");
|
|
264
277
|
i0.ɵɵtext(1, "None (Root)");
|
|
265
278
|
i0.ɵɵelementEnd();
|
|
266
279
|
} }
|
|
267
|
-
function
|
|
268
|
-
const
|
|
280
|
+
function MJAIAgentRunFormComponentExtended_Conditional_56_Conditional_20_Template(rf, ctx) { if (rf & 1) {
|
|
281
|
+
const _r10 = i0.ɵɵgetCurrentView();
|
|
269
282
|
i0.ɵɵelementStart(0, "a", 36);
|
|
270
|
-
i0.ɵɵlistener("click", function
|
|
283
|
+
i0.ɵɵlistener("click", function MJAIAgentRunFormComponentExtended_Conditional_56_Conditional_20_Template_a_click_0_listener() { i0.ɵɵrestoreView(_r10); const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.openEntityRecord("MJ: AI Agent Runs", ctx_r0.record.LastRunID)); });
|
|
271
284
|
i0.ɵɵtext(1);
|
|
272
285
|
i0.ɵɵelementEnd();
|
|
273
286
|
} if (rf & 2) {
|
|
274
|
-
const ctx_r0 = i0.ɵɵnextContext(
|
|
287
|
+
const ctx_r0 = i0.ɵɵnextContext(2);
|
|
275
288
|
i0.ɵɵadvance();
|
|
276
289
|
i0.ɵɵtextInterpolate1(" ", ctx_r0.record.LastRunID, " ");
|
|
277
290
|
} }
|
|
278
|
-
function
|
|
291
|
+
function MJAIAgentRunFormComponentExtended_Conditional_56_Conditional_21_Template(rf, ctx) { if (rf & 1) {
|
|
279
292
|
i0.ɵɵelementStart(0, "span");
|
|
280
293
|
i0.ɵɵtext(1, "None");
|
|
281
294
|
i0.ɵɵelementEnd();
|
|
282
295
|
} }
|
|
283
|
-
function
|
|
284
|
-
const
|
|
296
|
+
function MJAIAgentRunFormComponentExtended_Conditional_56_Conditional_26_Template(rf, ctx) { if (rf & 1) {
|
|
297
|
+
const _r11 = i0.ɵɵgetCurrentView();
|
|
285
298
|
i0.ɵɵelementStart(0, "a", 36);
|
|
286
|
-
i0.ɵɵlistener("click", function
|
|
299
|
+
i0.ɵɵlistener("click", function MJAIAgentRunFormComponentExtended_Conditional_56_Conditional_26_Template_a_click_0_listener() { i0.ɵɵrestoreView(_r11); const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.openEntityRecord("MJ: Conversations", ctx_r0.record.ConversationID)); });
|
|
287
300
|
i0.ɵɵtext(1);
|
|
288
301
|
i0.ɵɵelementEnd();
|
|
289
302
|
} if (rf & 2) {
|
|
290
|
-
const ctx_r0 = i0.ɵɵnextContext(
|
|
303
|
+
const ctx_r0 = i0.ɵɵnextContext(2);
|
|
291
304
|
i0.ɵɵadvance();
|
|
292
305
|
i0.ɵɵtextInterpolate1(" ", ctx_r0.record.ConversationID, " ");
|
|
293
306
|
} }
|
|
294
|
-
function
|
|
307
|
+
function MJAIAgentRunFormComponentExtended_Conditional_56_Conditional_27_Template(rf, ctx) { if (rf & 1) {
|
|
295
308
|
i0.ɵɵelementStart(0, "span");
|
|
296
309
|
i0.ɵɵtext(1, "N/A");
|
|
297
310
|
i0.ɵɵelementEnd();
|
|
298
311
|
} }
|
|
299
|
-
function
|
|
300
|
-
const
|
|
312
|
+
function MJAIAgentRunFormComponentExtended_Conditional_56_Conditional_32_Template(rf, ctx) { if (rf & 1) {
|
|
313
|
+
const _r12 = i0.ɵɵgetCurrentView();
|
|
301
314
|
i0.ɵɵelementStart(0, "a", 36);
|
|
302
|
-
i0.ɵɵlistener("click", function
|
|
315
|
+
i0.ɵɵlistener("click", function MJAIAgentRunFormComponentExtended_Conditional_56_Conditional_32_Template_a_click_0_listener() { i0.ɵɵrestoreView(_r12); const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.openEntityRecord("MJ: Users", ctx_r0.record.UserID)); });
|
|
303
316
|
i0.ɵɵtext(1);
|
|
304
317
|
i0.ɵɵelementEnd();
|
|
305
318
|
} if (rf & 2) {
|
|
306
|
-
const ctx_r0 = i0.ɵɵnextContext(
|
|
319
|
+
const ctx_r0 = i0.ɵɵnextContext(2);
|
|
307
320
|
i0.ɵɵadvance();
|
|
308
321
|
i0.ɵɵtextInterpolate1(" ", ctx_r0.record.User || "N/A", " ");
|
|
309
322
|
} }
|
|
310
|
-
function
|
|
323
|
+
function MJAIAgentRunFormComponentExtended_Conditional_56_Conditional_33_Template(rf, ctx) { if (rf & 1) {
|
|
311
324
|
i0.ɵɵelementStart(0, "span");
|
|
312
325
|
i0.ɵɵtext(1, "N/A");
|
|
313
326
|
i0.ɵɵelementEnd();
|
|
314
327
|
} }
|
|
315
|
-
function
|
|
316
|
-
|
|
317
|
-
i0.ɵɵ
|
|
318
|
-
i0.ɵɵtext(3, "Agent");
|
|
319
|
-
i0.ɵɵelementEnd();
|
|
320
|
-
i0.ɵɵelementStart(4, "span")(5, "a", 36);
|
|
321
|
-
i0.ɵɵlistener("click", function MJAIAgentRunFormComponentExtended_Conditional_56_ng_template_3_Template_a_click_5_listener() { i0.ɵɵrestoreView(_r7); const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.openEntityRecord("MJ: AI Agents", ctx_r0.record.AgentID)); });
|
|
322
|
-
i0.ɵɵtext(6);
|
|
323
|
-
i0.ɵɵelementEnd()()();
|
|
324
|
-
i0.ɵɵelementStart(7, "div", 68)(8, "label");
|
|
325
|
-
i0.ɵɵtext(9, "Parent Run ID");
|
|
326
|
-
i0.ɵɵelementEnd();
|
|
327
|
-
i0.ɵɵelementStart(10, "span");
|
|
328
|
-
i0.ɵɵconditionalCreate(11, MJAIAgentRunFormComponentExtended_Conditional_56_ng_template_3_Conditional_11_Template, 2, 1, "a", 69);
|
|
329
|
-
i0.ɵɵconditionalCreate(12, MJAIAgentRunFormComponentExtended_Conditional_56_ng_template_3_Conditional_12_Template, 2, 0, "span");
|
|
330
|
-
i0.ɵɵelementEnd()();
|
|
331
|
-
i0.ɵɵelementStart(13, "div", 68)(14, "label");
|
|
332
|
-
i0.ɵɵtext(15, "Last Run ID");
|
|
333
|
-
i0.ɵɵelementEnd();
|
|
334
|
-
i0.ɵɵelementStart(16, "span");
|
|
335
|
-
i0.ɵɵconditionalCreate(17, MJAIAgentRunFormComponentExtended_Conditional_56_ng_template_3_Conditional_17_Template, 2, 1, "a", 69);
|
|
336
|
-
i0.ɵɵconditionalCreate(18, MJAIAgentRunFormComponentExtended_Conditional_56_ng_template_3_Conditional_18_Template, 2, 0, "span");
|
|
337
|
-
i0.ɵɵelementEnd()();
|
|
338
|
-
i0.ɵɵelementStart(19, "div", 68)(20, "label");
|
|
339
|
-
i0.ɵɵtext(21, "Conversation ID");
|
|
340
|
-
i0.ɵɵelementEnd();
|
|
341
|
-
i0.ɵɵelementStart(22, "span");
|
|
342
|
-
i0.ɵɵconditionalCreate(23, MJAIAgentRunFormComponentExtended_Conditional_56_ng_template_3_Conditional_23_Template, 2, 1, "a", 69);
|
|
343
|
-
i0.ɵɵconditionalCreate(24, MJAIAgentRunFormComponentExtended_Conditional_56_ng_template_3_Conditional_24_Template, 2, 0, "span");
|
|
344
|
-
i0.ɵɵelementEnd()();
|
|
345
|
-
i0.ɵɵelementStart(25, "div", 68)(26, "label");
|
|
346
|
-
i0.ɵɵtext(27, "User");
|
|
347
|
-
i0.ɵɵelementEnd();
|
|
348
|
-
i0.ɵɵelementStart(28, "span");
|
|
349
|
-
i0.ɵɵconditionalCreate(29, MJAIAgentRunFormComponentExtended_Conditional_56_ng_template_3_Conditional_29_Template, 2, 1, "a", 69);
|
|
350
|
-
i0.ɵɵconditionalCreate(30, MJAIAgentRunFormComponentExtended_Conditional_56_ng_template_3_Conditional_30_Template, 2, 0, "span");
|
|
351
|
-
i0.ɵɵelementEnd()()();
|
|
352
|
-
} if (rf & 2) {
|
|
353
|
-
const ctx_r0 = i0.ɵɵnextContext(2);
|
|
354
|
-
i0.ɵɵadvance(6);
|
|
355
|
-
i0.ɵɵtextInterpolate1(" ", (ctx_r0.agent == null ? null : ctx_r0.agent.Name) || "N/A", " ");
|
|
356
|
-
i0.ɵɵadvance(5);
|
|
357
|
-
i0.ɵɵconditional(ctx_r0.record.ParentRunID ? 11 : -1);
|
|
358
|
-
i0.ɵɵadvance();
|
|
359
|
-
i0.ɵɵconditional(!ctx_r0.record.ParentRunID ? 12 : -1);
|
|
360
|
-
i0.ɵɵadvance(5);
|
|
361
|
-
i0.ɵɵconditional(ctx_r0.record.LastRunID ? 17 : -1);
|
|
362
|
-
i0.ɵɵadvance();
|
|
363
|
-
i0.ɵɵconditional(!ctx_r0.record.LastRunID ? 18 : -1);
|
|
364
|
-
i0.ɵɵadvance(5);
|
|
365
|
-
i0.ɵɵconditional(ctx_r0.record.ConversationID ? 23 : -1);
|
|
366
|
-
i0.ɵɵadvance();
|
|
367
|
-
i0.ɵɵconditional(!ctx_r0.record.ConversationID ? 24 : -1);
|
|
368
|
-
i0.ɵɵadvance(5);
|
|
369
|
-
i0.ɵɵconditional(ctx_r0.record.UserID ? 29 : -1);
|
|
370
|
-
i0.ɵɵadvance();
|
|
371
|
-
i0.ɵɵconditional(!ctx_r0.record.UserID ? 30 : -1);
|
|
328
|
+
function MJAIAgentRunFormComponentExtended_Conditional_56_ng_template_35_Template(rf, ctx) { if (rf & 1) {
|
|
329
|
+
i0.ɵɵelement(0, "i", 63);
|
|
330
|
+
i0.ɵɵtext(1, " Execution Settings ");
|
|
372
331
|
} }
|
|
373
|
-
function
|
|
374
|
-
const
|
|
332
|
+
function MJAIAgentRunFormComponentExtended_Conditional_56_Conditional_41_Template(rf, ctx) { if (rf & 1) {
|
|
333
|
+
const _r13 = i0.ɵɵgetCurrentView();
|
|
375
334
|
i0.ɵɵelementStart(0, "a", 36);
|
|
376
|
-
i0.ɵɵlistener("click", function
|
|
335
|
+
i0.ɵɵlistener("click", function MJAIAgentRunFormComponentExtended_Conditional_56_Conditional_41_Template_a_click_0_listener() { i0.ɵɵrestoreView(_r13); const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.openEntityRecord("MJ: AI Models", ctx_r0.record.OverrideModelID)); });
|
|
377
336
|
i0.ɵɵtext(1);
|
|
378
337
|
i0.ɵɵelementEnd();
|
|
379
338
|
} if (rf & 2) {
|
|
380
|
-
const ctx_r0 = i0.ɵɵnextContext(
|
|
339
|
+
const ctx_r0 = i0.ɵɵnextContext(2);
|
|
381
340
|
i0.ɵɵadvance();
|
|
382
341
|
i0.ɵɵtextInterpolate1(" ", ctx_r0.record.OverrideModel || "N/A", " ");
|
|
383
342
|
} }
|
|
384
|
-
function
|
|
343
|
+
function MJAIAgentRunFormComponentExtended_Conditional_56_Conditional_42_Template(rf, ctx) { if (rf & 1) {
|
|
385
344
|
i0.ɵɵelementStart(0, "span");
|
|
386
345
|
i0.ɵɵtext(1, "N/A");
|
|
387
346
|
i0.ɵɵelementEnd();
|
|
388
347
|
} }
|
|
389
|
-
function
|
|
390
|
-
const
|
|
348
|
+
function MJAIAgentRunFormComponentExtended_Conditional_56_Conditional_47_Template(rf, ctx) { if (rf & 1) {
|
|
349
|
+
const _r14 = i0.ɵɵgetCurrentView();
|
|
391
350
|
i0.ɵɵelementStart(0, "a", 36);
|
|
392
|
-
i0.ɵɵlistener("click", function
|
|
351
|
+
i0.ɵɵlistener("click", function MJAIAgentRunFormComponentExtended_Conditional_56_Conditional_47_Template_a_click_0_listener() { i0.ɵɵrestoreView(_r14); const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.openEntityRecord("MJ: AI Vendors", ctx_r0.record.OverrideVendorID)); });
|
|
393
352
|
i0.ɵɵtext(1);
|
|
394
353
|
i0.ɵɵelementEnd();
|
|
395
354
|
} if (rf & 2) {
|
|
396
|
-
const ctx_r0 = i0.ɵɵnextContext(
|
|
355
|
+
const ctx_r0 = i0.ɵɵnextContext(2);
|
|
397
356
|
i0.ɵɵadvance();
|
|
398
357
|
i0.ɵɵtextInterpolate1(" ", ctx_r0.record.OverrideVendor || "N/A", " ");
|
|
399
358
|
} }
|
|
400
|
-
function
|
|
359
|
+
function MJAIAgentRunFormComponentExtended_Conditional_56_Conditional_48_Template(rf, ctx) { if (rf & 1) {
|
|
401
360
|
i0.ɵɵelementStart(0, "span");
|
|
402
361
|
i0.ɵɵtext(1, "N/A");
|
|
403
362
|
i0.ɵɵelementEnd();
|
|
404
363
|
} }
|
|
405
|
-
function
|
|
406
|
-
i0.ɵɵ
|
|
407
|
-
i0.ɵɵtext(
|
|
408
|
-
i0.ɵɵelementEnd();
|
|
409
|
-
i0.ɵɵelementStart(4, "span");
|
|
410
|
-
i0.ɵɵconditionalCreate(5, MJAIAgentRunFormComponentExtended_Conditional_56_ng_template_5_Conditional_5_Template, 2, 1, "a", 69);
|
|
411
|
-
i0.ɵɵconditionalCreate(6, MJAIAgentRunFormComponentExtended_Conditional_56_ng_template_5_Conditional_6_Template, 2, 0, "span");
|
|
412
|
-
i0.ɵɵelementEnd()();
|
|
413
|
-
i0.ɵɵelementStart(7, "div", 68)(8, "label");
|
|
414
|
-
i0.ɵɵtext(9, "Override Vendor");
|
|
415
|
-
i0.ɵɵelementEnd();
|
|
416
|
-
i0.ɵɵelementStart(10, "span");
|
|
417
|
-
i0.ɵɵconditionalCreate(11, MJAIAgentRunFormComponentExtended_Conditional_56_ng_template_5_Conditional_11_Template, 2, 1, "a", 69);
|
|
418
|
-
i0.ɵɵconditionalCreate(12, MJAIAgentRunFormComponentExtended_Conditional_56_ng_template_5_Conditional_12_Template, 2, 0, "span");
|
|
419
|
-
i0.ɵɵelementEnd()();
|
|
420
|
-
i0.ɵɵelementStart(13, "div", 68)(14, "label");
|
|
421
|
-
i0.ɵɵtext(15, "Verbose Logging");
|
|
422
|
-
i0.ɵɵelementEnd();
|
|
423
|
-
i0.ɵɵelementStart(16, "span");
|
|
424
|
-
i0.ɵɵtext(17);
|
|
425
|
-
i0.ɵɵelementEnd()()();
|
|
426
|
-
} if (rf & 2) {
|
|
427
|
-
const ctx_r0 = i0.ɵɵnextContext(2);
|
|
428
|
-
i0.ɵɵadvance(5);
|
|
429
|
-
i0.ɵɵconditional(ctx_r0.record.OverrideModelID ? 5 : -1);
|
|
430
|
-
i0.ɵɵadvance();
|
|
431
|
-
i0.ɵɵconditional(!ctx_r0.record.OverrideModelID ? 6 : -1);
|
|
432
|
-
i0.ɵɵadvance(5);
|
|
433
|
-
i0.ɵɵconditional(ctx_r0.record.OverrideVendorID ? 11 : -1);
|
|
434
|
-
i0.ɵɵadvance();
|
|
435
|
-
i0.ɵɵconditional(!ctx_r0.record.OverrideVendorID ? 12 : -1);
|
|
436
|
-
i0.ɵɵadvance(5);
|
|
437
|
-
i0.ɵɵtextInterpolate(ctx_r0.record.Verbose ? "Yes" : "No");
|
|
364
|
+
function MJAIAgentRunFormComponentExtended_Conditional_56_ng_template_55_Template(rf, ctx) { if (rf & 1) {
|
|
365
|
+
i0.ɵɵelement(0, "i", 64);
|
|
366
|
+
i0.ɵɵtext(1, " Execution Status ");
|
|
438
367
|
} }
|
|
439
|
-
function
|
|
368
|
+
function MJAIAgentRunFormComponentExtended_Conditional_56_Conditional_65_Template(rf, ctx) { if (rf & 1) {
|
|
440
369
|
i0.ɵɵelementStart(0, "span");
|
|
441
370
|
i0.ɵɵtext(1, "In Progress");
|
|
442
371
|
i0.ɵɵelementEnd();
|
|
443
372
|
} }
|
|
444
|
-
function
|
|
445
|
-
i0.ɵɵelementStart(0, "span",
|
|
373
|
+
function MJAIAgentRunFormComponentExtended_Conditional_56_Conditional_66_Template(rf, ctx) { if (rf & 1) {
|
|
374
|
+
i0.ɵɵelementStart(0, "span", 60);
|
|
446
375
|
i0.ɵɵtext(1, "Yes");
|
|
447
376
|
i0.ɵɵelementEnd();
|
|
448
377
|
} }
|
|
449
|
-
function
|
|
450
|
-
i0.ɵɵelementStart(0, "span",
|
|
378
|
+
function MJAIAgentRunFormComponentExtended_Conditional_56_Conditional_67_Template(rf, ctx) { if (rf & 1) {
|
|
379
|
+
i0.ɵɵelementStart(0, "span", 61);
|
|
451
380
|
i0.ɵɵtext(1, "No");
|
|
452
381
|
i0.ɵɵelementEnd();
|
|
453
382
|
} }
|
|
454
|
-
function
|
|
455
|
-
i0.ɵɵelementStart(0, "div",
|
|
383
|
+
function MJAIAgentRunFormComponentExtended_Conditional_56_Conditional_68_Template(rf, ctx) { if (rf & 1) {
|
|
384
|
+
i0.ɵɵelementStart(0, "div", 62)(1, "label");
|
|
456
385
|
i0.ɵɵtext(2, "Message");
|
|
457
386
|
i0.ɵɵelementEnd();
|
|
458
|
-
i0.ɵɵelementStart(3, "div",
|
|
387
|
+
i0.ɵɵelementStart(3, "div", 65);
|
|
459
388
|
i0.ɵɵtext(4);
|
|
460
389
|
i0.ɵɵelementEnd()();
|
|
461
390
|
} if (rf & 2) {
|
|
462
|
-
const ctx_r0 = i0.ɵɵnextContext(
|
|
391
|
+
const ctx_r0 = i0.ɵɵnextContext(2);
|
|
463
392
|
i0.ɵɵadvance(4);
|
|
464
393
|
i0.ɵɵtextInterpolate(ctx_r0.record.Message);
|
|
465
394
|
} }
|
|
466
|
-
function
|
|
467
|
-
i0.ɵɵelementStart(0, "div",
|
|
395
|
+
function MJAIAgentRunFormComponentExtended_Conditional_56_Conditional_69_Template(rf, ctx) { if (rf & 1) {
|
|
396
|
+
i0.ɵɵelementStart(0, "div", 62)(1, "label");
|
|
468
397
|
i0.ɵɵtext(2, "Error Message");
|
|
469
398
|
i0.ɵɵelementEnd();
|
|
470
|
-
i0.ɵɵelementStart(3, "div",
|
|
399
|
+
i0.ɵɵelementStart(3, "div", 61);
|
|
471
400
|
i0.ɵɵtext(4);
|
|
472
401
|
i0.ɵɵelementEnd()();
|
|
473
402
|
} if (rf & 2) {
|
|
474
|
-
const ctx_r0 = i0.ɵɵnextContext(
|
|
403
|
+
const ctx_r0 = i0.ɵɵnextContext(2);
|
|
475
404
|
i0.ɵɵadvance(4);
|
|
476
405
|
i0.ɵɵtextInterpolate(ctx_r0.record.ErrorMessage);
|
|
477
406
|
} }
|
|
478
|
-
function
|
|
479
|
-
i0.ɵɵ
|
|
480
|
-
i0.ɵɵtext(
|
|
481
|
-
i0.ɵɵelementEnd();
|
|
482
|
-
i0.ɵɵelementStart(4, "span", 18);
|
|
483
|
-
i0.ɵɵtext(5);
|
|
484
|
-
i0.ɵɵelementEnd()();
|
|
485
|
-
i0.ɵɵelementStart(6, "div", 68)(7, "label");
|
|
486
|
-
i0.ɵɵtext(8, "Success");
|
|
487
|
-
i0.ɵɵelementEnd();
|
|
488
|
-
i0.ɵɵconditionalCreate(9, MJAIAgentRunFormComponentExtended_Conditional_56_ng_template_7_Conditional_9_Template, 2, 0, "span")(10, MJAIAgentRunFormComponentExtended_Conditional_56_ng_template_7_Conditional_10_Template, 2, 0, "span", 70)(11, MJAIAgentRunFormComponentExtended_Conditional_56_ng_template_7_Conditional_11_Template, 2, 0, "span", 71);
|
|
489
|
-
i0.ɵɵelementEnd();
|
|
490
|
-
i0.ɵɵconditionalCreate(12, MJAIAgentRunFormComponentExtended_Conditional_56_ng_template_7_Conditional_12_Template, 5, 1, "div", 72);
|
|
491
|
-
i0.ɵɵconditionalCreate(13, MJAIAgentRunFormComponentExtended_Conditional_56_ng_template_7_Conditional_13_Template, 5, 1, "div", 72);
|
|
492
|
-
i0.ɵɵelementEnd();
|
|
493
|
-
} if (rf & 2) {
|
|
494
|
-
const ctx_r0 = i0.ɵɵnextContext(2);
|
|
495
|
-
i0.ɵɵadvance(4);
|
|
496
|
-
i0.ɵɵattribute("data-status", ctx_r0.record.Status);
|
|
497
|
-
i0.ɵɵadvance();
|
|
498
|
-
i0.ɵɵtextInterpolate1(" ", ctx_r0.record.Status, " ");
|
|
499
|
-
i0.ɵɵadvance(4);
|
|
500
|
-
i0.ɵɵconditional(ctx_r0.record.Success === null ? 9 : ctx_r0.record.Success ? 10 : 11);
|
|
501
|
-
i0.ɵɵadvance(3);
|
|
502
|
-
i0.ɵɵconditional(ctx_r0.record.Message ? 12 : -1);
|
|
503
|
-
i0.ɵɵadvance();
|
|
504
|
-
i0.ɵɵconditional(ctx_r0.record.ErrorMessage ? 13 : -1);
|
|
407
|
+
function MJAIAgentRunFormComponentExtended_Conditional_56_ng_template_71_Template(rf, ctx) { if (rf & 1) {
|
|
408
|
+
i0.ɵɵelement(0, "i", 66);
|
|
409
|
+
i0.ɵɵtext(1, " Usage & Cost ");
|
|
505
410
|
} }
|
|
506
|
-
function
|
|
507
|
-
i0.ɵɵ
|
|
508
|
-
i0.ɵɵtext(
|
|
509
|
-
i0.ɵɵelementEnd();
|
|
510
|
-
i0.ɵɵelementStart(4, "span");
|
|
511
|
-
i0.ɵɵtext(5);
|
|
512
|
-
i0.ɵɵpipe(6, "number");
|
|
513
|
-
i0.ɵɵelementEnd()();
|
|
514
|
-
i0.ɵɵelementStart(7, "div", 68)(8, "label");
|
|
515
|
-
i0.ɵɵtext(9, "Prompt Tokens");
|
|
516
|
-
i0.ɵɵelementEnd();
|
|
517
|
-
i0.ɵɵelementStart(10, "span");
|
|
518
|
-
i0.ɵɵtext(11);
|
|
519
|
-
i0.ɵɵpipe(12, "number");
|
|
520
|
-
i0.ɵɵelementEnd()();
|
|
521
|
-
i0.ɵɵelementStart(13, "div", 68)(14, "label");
|
|
522
|
-
i0.ɵɵtext(15, "Completion Tokens");
|
|
523
|
-
i0.ɵɵelementEnd();
|
|
524
|
-
i0.ɵɵelementStart(16, "span");
|
|
525
|
-
i0.ɵɵtext(17);
|
|
526
|
-
i0.ɵɵpipe(18, "number");
|
|
527
|
-
i0.ɵɵelementEnd()();
|
|
528
|
-
i0.ɵɵelementStart(19, "div", 68)(20, "label");
|
|
529
|
-
i0.ɵɵtext(21, "Total Cost");
|
|
530
|
-
i0.ɵɵelementEnd();
|
|
531
|
-
i0.ɵɵelementStart(22, "span");
|
|
532
|
-
i0.ɵɵtext(23);
|
|
533
|
-
i0.ɵɵpipe(24, "number");
|
|
534
|
-
i0.ɵɵelementEnd()();
|
|
535
|
-
i0.ɵɵelementStart(25, "div", 68)(26, "label");
|
|
536
|
-
i0.ɵɵtext(27, "Total Prompt Iterations");
|
|
537
|
-
i0.ɵɵelementEnd();
|
|
538
|
-
i0.ɵɵelementStart(28, "span");
|
|
539
|
-
i0.ɵɵtext(29);
|
|
540
|
-
i0.ɵɵpipe(30, "number");
|
|
541
|
-
i0.ɵɵelementEnd()()();
|
|
542
|
-
} if (rf & 2) {
|
|
543
|
-
const ctx_r0 = i0.ɵɵnextContext(2);
|
|
544
|
-
i0.ɵɵadvance(5);
|
|
545
|
-
i0.ɵɵtextInterpolate(ctx_r0.record.TotalTokensUsed ? i0.ɵɵpipeBind2(6, 5, ctx_r0.record.TotalTokensUsed, "1.0-0") : "N/A");
|
|
546
|
-
i0.ɵɵadvance(6);
|
|
547
|
-
i0.ɵɵtextInterpolate(ctx_r0.record.TotalPromptTokensUsed ? i0.ɵɵpipeBind2(12, 8, ctx_r0.record.TotalPromptTokensUsed, "1.0-0") : "N/A");
|
|
548
|
-
i0.ɵɵadvance(6);
|
|
549
|
-
i0.ɵɵtextInterpolate(ctx_r0.record.TotalCompletionTokensUsed ? i0.ɵɵpipeBind2(18, 11, ctx_r0.record.TotalCompletionTokensUsed, "1.0-0") : "N/A");
|
|
550
|
-
i0.ɵɵadvance(6);
|
|
551
|
-
i0.ɵɵtextInterpolate(ctx_r0.record.TotalCost != null ? "$" + i0.ɵɵpipeBind2(24, 14, ctx_r0.record.TotalCost, "1.2-4") : "N/A");
|
|
552
|
-
i0.ɵɵadvance(6);
|
|
553
|
-
i0.ɵɵtextInterpolate(ctx_r0.record.TotalPromptIterations != null ? i0.ɵɵpipeBind2(30, 17, ctx_r0.record.TotalPromptIterations, "1.0-0") : "N/A");
|
|
411
|
+
function MJAIAgentRunFormComponentExtended_Conditional_56_Conditional_103_ng_template_1_Template(rf, ctx) { if (rf & 1) {
|
|
412
|
+
i0.ɵɵelement(0, "i", 70);
|
|
413
|
+
i0.ɵɵtext(1, " Result ");
|
|
554
414
|
} }
|
|
555
|
-
function
|
|
556
|
-
i0.ɵɵelement(0, "mj-code-editor",
|
|
415
|
+
function MJAIAgentRunFormComponentExtended_Conditional_56_Conditional_103_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
416
|
+
i0.ɵɵelement(0, "mj-code-editor", 68);
|
|
557
417
|
} if (rf & 2) {
|
|
558
|
-
const ctx_r0 = i0.ɵɵnextContext(
|
|
418
|
+
const ctx_r0 = i0.ɵɵnextContext(3);
|
|
559
419
|
i0.ɵɵproperty("ngModel", ctx_r0.parsedResult)("language", "json")("readonly", true);
|
|
560
420
|
} }
|
|
561
|
-
function
|
|
562
|
-
i0.ɵɵelementStart(0, "div",
|
|
421
|
+
function MJAIAgentRunFormComponentExtended_Conditional_56_Conditional_103_Conditional_4_Template(rf, ctx) { if (rf & 1) {
|
|
422
|
+
i0.ɵɵelementStart(0, "div", 69);
|
|
563
423
|
i0.ɵɵelement(1, "i", 43);
|
|
564
424
|
i0.ɵɵtext(2, " Loading result data... ");
|
|
565
425
|
i0.ɵɵelementEnd();
|
|
566
426
|
} }
|
|
567
|
-
function
|
|
568
|
-
i0.ɵɵelementStart(0, "
|
|
569
|
-
i0.ɵɵ
|
|
570
|
-
i0.ɵɵ
|
|
427
|
+
function MJAIAgentRunFormComponentExtended_Conditional_56_Conditional_103_Template(rf, ctx) { if (rf & 1) {
|
|
428
|
+
i0.ɵɵelementStart(0, "mj-accordion-panel", 55);
|
|
429
|
+
i0.ɵɵtemplate(1, MJAIAgentRunFormComponentExtended_Conditional_56_Conditional_103_ng_template_1_Template, 2, 0, "ng-template", 56);
|
|
430
|
+
i0.ɵɵelementStart(2, "div", 67);
|
|
431
|
+
i0.ɵɵconditionalCreate(3, MJAIAgentRunFormComponentExtended_Conditional_56_Conditional_103_Conditional_3_Template, 1, 3, "mj-code-editor", 68)(4, MJAIAgentRunFormComponentExtended_Conditional_56_Conditional_103_Conditional_4_Template, 3, 0, "div", 69);
|
|
432
|
+
i0.ɵɵelementEnd()();
|
|
571
433
|
} if (rf & 2) {
|
|
572
|
-
const ctx_r0 = i0.ɵɵnextContext(
|
|
573
|
-
i0.ɵɵ
|
|
574
|
-
i0.ɵɵ
|
|
434
|
+
const ctx_r0 = i0.ɵɵnextContext(2);
|
|
435
|
+
i0.ɵɵproperty("Expanded", false);
|
|
436
|
+
i0.ɵɵadvance(3);
|
|
437
|
+
i0.ɵɵconditional(ctx_r0.isParsingComplete ? 3 : 4);
|
|
575
438
|
} }
|
|
576
|
-
function
|
|
577
|
-
i0.ɵɵ
|
|
578
|
-
i0.ɵɵ
|
|
579
|
-
i0.ɵɵelementEnd();
|
|
439
|
+
function MJAIAgentRunFormComponentExtended_Conditional_56_Conditional_104_ng_template_1_Template(rf, ctx) { if (rf & 1) {
|
|
440
|
+
i0.ɵɵelement(0, "i", 71);
|
|
441
|
+
i0.ɵɵtext(1, " Starting Payload ");
|
|
580
442
|
} }
|
|
581
|
-
function
|
|
582
|
-
i0.ɵɵelement(0, "mj-code-editor",
|
|
443
|
+
function MJAIAgentRunFormComponentExtended_Conditional_56_Conditional_104_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
444
|
+
i0.ɵɵelement(0, "mj-code-editor", 68);
|
|
583
445
|
} if (rf & 2) {
|
|
584
|
-
const ctx_r0 = i0.ɵɵnextContext(
|
|
446
|
+
const ctx_r0 = i0.ɵɵnextContext(3);
|
|
585
447
|
i0.ɵɵproperty("ngModel", ctx_r0.parsedStartingPayload)("language", "json")("readonly", true);
|
|
586
448
|
} }
|
|
587
|
-
function
|
|
588
|
-
i0.ɵɵelementStart(0, "div",
|
|
449
|
+
function MJAIAgentRunFormComponentExtended_Conditional_56_Conditional_104_Conditional_4_Template(rf, ctx) { if (rf & 1) {
|
|
450
|
+
i0.ɵɵelementStart(0, "div", 69);
|
|
589
451
|
i0.ɵɵelement(1, "i", 43);
|
|
590
452
|
i0.ɵɵtext(2, " Loading payload data... ");
|
|
591
453
|
i0.ɵɵelementEnd();
|
|
592
454
|
} }
|
|
593
|
-
function
|
|
594
|
-
i0.ɵɵelementStart(0, "
|
|
595
|
-
i0.ɵɵ
|
|
596
|
-
i0.ɵɵ
|
|
455
|
+
function MJAIAgentRunFormComponentExtended_Conditional_56_Conditional_104_Template(rf, ctx) { if (rf & 1) {
|
|
456
|
+
i0.ɵɵelementStart(0, "mj-accordion-panel", 55);
|
|
457
|
+
i0.ɵɵtemplate(1, MJAIAgentRunFormComponentExtended_Conditional_56_Conditional_104_ng_template_1_Template, 2, 0, "ng-template", 56);
|
|
458
|
+
i0.ɵɵelementStart(2, "div", 67);
|
|
459
|
+
i0.ɵɵconditionalCreate(3, MJAIAgentRunFormComponentExtended_Conditional_56_Conditional_104_Conditional_3_Template, 1, 3, "mj-code-editor", 68)(4, MJAIAgentRunFormComponentExtended_Conditional_56_Conditional_104_Conditional_4_Template, 3, 0, "div", 69);
|
|
460
|
+
i0.ɵɵelementEnd()();
|
|
597
461
|
} if (rf & 2) {
|
|
598
|
-
const ctx_r0 = i0.ɵɵnextContext(
|
|
599
|
-
i0.ɵɵ
|
|
600
|
-
i0.ɵɵ
|
|
462
|
+
const ctx_r0 = i0.ɵɵnextContext(2);
|
|
463
|
+
i0.ɵɵproperty("Expanded", false);
|
|
464
|
+
i0.ɵɵadvance(3);
|
|
465
|
+
i0.ɵɵconditional(ctx_r0.isParsingComplete ? 3 : 4);
|
|
601
466
|
} }
|
|
602
|
-
function
|
|
603
|
-
i0.ɵɵ
|
|
604
|
-
i0.ɵɵ
|
|
605
|
-
i0.ɵɵelementEnd();
|
|
467
|
+
function MJAIAgentRunFormComponentExtended_Conditional_56_Conditional_105_ng_template_1_Template(rf, ctx) { if (rf & 1) {
|
|
468
|
+
i0.ɵɵelement(0, "i", 72);
|
|
469
|
+
i0.ɵɵtext(1, " Execution Data ");
|
|
606
470
|
} }
|
|
607
|
-
function
|
|
608
|
-
i0.ɵɵelement(0, "mj-code-editor",
|
|
471
|
+
function MJAIAgentRunFormComponentExtended_Conditional_56_Conditional_105_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
472
|
+
i0.ɵɵelement(0, "mj-code-editor", 68);
|
|
609
473
|
} if (rf & 2) {
|
|
610
|
-
const ctx_r0 = i0.ɵɵnextContext(
|
|
474
|
+
const ctx_r0 = i0.ɵɵnextContext(3);
|
|
611
475
|
i0.ɵɵproperty("ngModel", ctx_r0.parsedData)("language", "json")("readonly", true);
|
|
612
476
|
} }
|
|
613
|
-
function
|
|
614
|
-
i0.ɵɵelementStart(0, "div",
|
|
477
|
+
function MJAIAgentRunFormComponentExtended_Conditional_56_Conditional_105_Conditional_4_Template(rf, ctx) { if (rf & 1) {
|
|
478
|
+
i0.ɵɵelementStart(0, "div", 69);
|
|
615
479
|
i0.ɵɵelement(1, "i", 43);
|
|
616
480
|
i0.ɵɵtext(2, " Loading execution data... ");
|
|
617
481
|
i0.ɵɵelementEnd();
|
|
618
482
|
} }
|
|
619
|
-
function
|
|
620
|
-
i0.ɵɵelementStart(0, "
|
|
621
|
-
i0.ɵɵ
|
|
622
|
-
i0.ɵɵ
|
|
483
|
+
function MJAIAgentRunFormComponentExtended_Conditional_56_Conditional_105_Template(rf, ctx) { if (rf & 1) {
|
|
484
|
+
i0.ɵɵelementStart(0, "mj-accordion-panel", 55);
|
|
485
|
+
i0.ɵɵtemplate(1, MJAIAgentRunFormComponentExtended_Conditional_56_Conditional_105_ng_template_1_Template, 2, 0, "ng-template", 56);
|
|
486
|
+
i0.ɵɵelementStart(2, "div", 67);
|
|
487
|
+
i0.ɵɵconditionalCreate(3, MJAIAgentRunFormComponentExtended_Conditional_56_Conditional_105_Conditional_3_Template, 1, 3, "mj-code-editor", 68)(4, MJAIAgentRunFormComponentExtended_Conditional_56_Conditional_105_Conditional_4_Template, 3, 0, "div", 69);
|
|
488
|
+
i0.ɵɵelementEnd()();
|
|
623
489
|
} if (rf & 2) {
|
|
624
|
-
const ctx_r0 = i0.ɵɵnextContext(
|
|
625
|
-
i0.ɵɵ
|
|
626
|
-
i0.ɵɵ
|
|
490
|
+
const ctx_r0 = i0.ɵɵnextContext(2);
|
|
491
|
+
i0.ɵɵproperty("Expanded", false);
|
|
492
|
+
i0.ɵɵadvance(3);
|
|
493
|
+
i0.ɵɵconditional(ctx_r0.isParsingComplete ? 3 : 4);
|
|
627
494
|
} }
|
|
628
|
-
function
|
|
629
|
-
i0.ɵɵ
|
|
630
|
-
i0.ɵɵ
|
|
631
|
-
i0.ɵɵelementEnd();
|
|
495
|
+
function MJAIAgentRunFormComponentExtended_Conditional_56_Conditional_106_ng_template_1_Template(rf, ctx) { if (rf & 1) {
|
|
496
|
+
i0.ɵɵelement(0, "i", 73);
|
|
497
|
+
i0.ɵɵtext(1, " Final Payload ");
|
|
632
498
|
} }
|
|
633
|
-
function
|
|
634
|
-
i0.ɵɵelement(0, "mj-code-editor",
|
|
499
|
+
function MJAIAgentRunFormComponentExtended_Conditional_56_Conditional_106_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
500
|
+
i0.ɵɵelement(0, "mj-code-editor", 68);
|
|
635
501
|
} if (rf & 2) {
|
|
636
|
-
const ctx_r0 = i0.ɵɵnextContext(
|
|
502
|
+
const ctx_r0 = i0.ɵɵnextContext(3);
|
|
637
503
|
i0.ɵɵproperty("ngModel", ctx_r0.parsedFinalPayload)("language", "json")("readonly", true);
|
|
638
504
|
} }
|
|
639
|
-
function
|
|
640
|
-
i0.ɵɵelementStart(0, "div",
|
|
505
|
+
function MJAIAgentRunFormComponentExtended_Conditional_56_Conditional_106_Conditional_4_Template(rf, ctx) { if (rf & 1) {
|
|
506
|
+
i0.ɵɵelementStart(0, "div", 69);
|
|
641
507
|
i0.ɵɵelement(1, "i", 43);
|
|
642
508
|
i0.ɵɵtext(2, " Loading final payload data... ");
|
|
643
509
|
i0.ɵɵelementEnd();
|
|
644
510
|
} }
|
|
645
|
-
function
|
|
646
|
-
i0.ɵɵelementStart(0, "
|
|
647
|
-
i0.ɵɵ
|
|
648
|
-
i0.ɵɵ
|
|
511
|
+
function MJAIAgentRunFormComponentExtended_Conditional_56_Conditional_106_Template(rf, ctx) { if (rf & 1) {
|
|
512
|
+
i0.ɵɵelementStart(0, "mj-accordion-panel", 55);
|
|
513
|
+
i0.ɵɵtemplate(1, MJAIAgentRunFormComponentExtended_Conditional_56_Conditional_106_ng_template_1_Template, 2, 0, "ng-template", 56);
|
|
514
|
+
i0.ɵɵelementStart(2, "div", 67);
|
|
515
|
+
i0.ɵɵconditionalCreate(3, MJAIAgentRunFormComponentExtended_Conditional_56_Conditional_106_Conditional_3_Template, 1, 3, "mj-code-editor", 68)(4, MJAIAgentRunFormComponentExtended_Conditional_56_Conditional_106_Conditional_4_Template, 3, 0, "div", 69);
|
|
516
|
+
i0.ɵɵelementEnd()();
|
|
649
517
|
} if (rf & 2) {
|
|
650
|
-
const ctx_r0 = i0.ɵɵnextContext(
|
|
651
|
-
i0.ɵɵ
|
|
652
|
-
i0.ɵɵ
|
|
518
|
+
const ctx_r0 = i0.ɵɵnextContext(2);
|
|
519
|
+
i0.ɵɵproperty("Expanded", false);
|
|
520
|
+
i0.ɵɵadvance(3);
|
|
521
|
+
i0.ɵɵconditional(ctx_r0.isParsingComplete ? 3 : 4);
|
|
653
522
|
} }
|
|
654
|
-
function
|
|
655
|
-
i0.ɵɵ
|
|
656
|
-
i0.ɵɵ
|
|
657
|
-
i0.ɵɵelementEnd();
|
|
523
|
+
function MJAIAgentRunFormComponentExtended_Conditional_56_Conditional_107_ng_template_1_Template(rf, ctx) { if (rf & 1) {
|
|
524
|
+
i0.ɵɵelement(0, "i", 76);
|
|
525
|
+
i0.ɵɵtext(1, " Payload Diff ");
|
|
658
526
|
} }
|
|
659
|
-
function
|
|
660
|
-
i0.ɵɵelement(0, "mj-deep-diff",
|
|
527
|
+
function MJAIAgentRunFormComponentExtended_Conditional_56_Conditional_107_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
528
|
+
i0.ɵɵelement(0, "mj-deep-diff", 75);
|
|
661
529
|
} if (rf & 2) {
|
|
662
|
-
const ctx_r0 = i0.ɵɵnextContext(
|
|
530
|
+
const ctx_r0 = i0.ɵɵnextContext(3);
|
|
663
531
|
i0.ɵɵproperty("oldValue", ctx_r0.startingPayloadObject)("newValue", ctx_r0.finalPayloadObject)("title", "")("showSummary", true)("showUnchanged", false)("expandAll", false)("maxDepth", 10)("maxStringLength", 200)("treatNullAsUndefined", true);
|
|
664
532
|
} }
|
|
665
|
-
function
|
|
666
|
-
i0.ɵɵelementStart(0, "div",
|
|
533
|
+
function MJAIAgentRunFormComponentExtended_Conditional_56_Conditional_107_Conditional_4_Template(rf, ctx) { if (rf & 1) {
|
|
534
|
+
i0.ɵɵelementStart(0, "div", 69);
|
|
667
535
|
i0.ɵɵelement(1, "i", 43);
|
|
668
536
|
i0.ɵɵtext(2, " Loading payload diff... ");
|
|
669
537
|
i0.ɵɵelementEnd();
|
|
670
538
|
} }
|
|
671
|
-
function
|
|
672
|
-
i0.ɵɵelementStart(0, "
|
|
673
|
-
i0.ɵɵ
|
|
674
|
-
i0.ɵɵ
|
|
539
|
+
function MJAIAgentRunFormComponentExtended_Conditional_56_Conditional_107_Template(rf, ctx) { if (rf & 1) {
|
|
540
|
+
i0.ɵɵelementStart(0, "mj-accordion-panel", 55);
|
|
541
|
+
i0.ɵɵtemplate(1, MJAIAgentRunFormComponentExtended_Conditional_56_Conditional_107_ng_template_1_Template, 2, 0, "ng-template", 56);
|
|
542
|
+
i0.ɵɵelementStart(2, "div", 74);
|
|
543
|
+
i0.ɵɵconditionalCreate(3, MJAIAgentRunFormComponentExtended_Conditional_56_Conditional_107_Conditional_3_Template, 1, 9, "mj-deep-diff", 75)(4, MJAIAgentRunFormComponentExtended_Conditional_56_Conditional_107_Conditional_4_Template, 3, 0, "div", 69);
|
|
544
|
+
i0.ɵɵelementEnd()();
|
|
675
545
|
} if (rf & 2) {
|
|
676
|
-
const ctx_r0 = i0.ɵɵnextContext(
|
|
677
|
-
i0.ɵɵ
|
|
678
|
-
i0.ɵɵ
|
|
679
|
-
|
|
680
|
-
function MJAIAgentRunFormComponentExtended_Conditional_56_Conditional_14_Template(rf, ctx) { if (rf & 1) {
|
|
681
|
-
i0.ɵɵelementStart(0, "kendo-panelbar-item", 66);
|
|
682
|
-
i0.ɵɵtemplate(1, MJAIAgentRunFormComponentExtended_Conditional_56_Conditional_14_ng_template_1_Template, 3, 1, "ng-template", 58);
|
|
683
|
-
i0.ɵɵelementEnd();
|
|
546
|
+
const ctx_r0 = i0.ɵɵnextContext(2);
|
|
547
|
+
i0.ɵɵproperty("Expanded", false);
|
|
548
|
+
i0.ɵɵadvance(3);
|
|
549
|
+
i0.ɵɵconditional(ctx_r0.isParsingComplete ? 3 : 4);
|
|
684
550
|
} }
|
|
685
551
|
function MJAIAgentRunFormComponentExtended_Conditional_56_Template(rf, ctx) { if (rf & 1) {
|
|
686
|
-
|
|
687
|
-
i0.ɵɵ
|
|
552
|
+
const _r8 = i0.ɵɵgetCurrentView();
|
|
553
|
+
i0.ɵɵelementStart(0, "div", 35)(1, "mj-accordion-panel", 55);
|
|
554
|
+
i0.ɵɵtemplate(2, MJAIAgentRunFormComponentExtended_Conditional_56_ng_template_2_Template, 2, 0, "ng-template", 56);
|
|
555
|
+
i0.ɵɵelementStart(3, "div", 57)(4, "div", 58)(5, "label");
|
|
556
|
+
i0.ɵɵtext(6, "Agent");
|
|
557
|
+
i0.ɵɵelementEnd();
|
|
558
|
+
i0.ɵɵelementStart(7, "span")(8, "a", 36);
|
|
559
|
+
i0.ɵɵlistener("click", function MJAIAgentRunFormComponentExtended_Conditional_56_Template_a_click_8_listener() { i0.ɵɵrestoreView(_r8); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.openEntityRecord("MJ: AI Agents", ctx_r0.record.AgentID)); });
|
|
560
|
+
i0.ɵɵtext(9);
|
|
561
|
+
i0.ɵɵelementEnd()()();
|
|
562
|
+
i0.ɵɵelementStart(10, "div", 58)(11, "label");
|
|
563
|
+
i0.ɵɵtext(12, "Parent Run ID");
|
|
564
|
+
i0.ɵɵelementEnd();
|
|
565
|
+
i0.ɵɵelementStart(13, "span");
|
|
566
|
+
i0.ɵɵconditionalCreate(14, MJAIAgentRunFormComponentExtended_Conditional_56_Conditional_14_Template, 2, 1, "a", 59);
|
|
567
|
+
i0.ɵɵconditionalCreate(15, MJAIAgentRunFormComponentExtended_Conditional_56_Conditional_15_Template, 2, 0, "span");
|
|
568
|
+
i0.ɵɵelementEnd()();
|
|
569
|
+
i0.ɵɵelementStart(16, "div", 58)(17, "label");
|
|
570
|
+
i0.ɵɵtext(18, "Last Run ID");
|
|
688
571
|
i0.ɵɵelementEnd();
|
|
689
|
-
i0.ɵɵelementStart(
|
|
690
|
-
i0.ɵɵ
|
|
572
|
+
i0.ɵɵelementStart(19, "span");
|
|
573
|
+
i0.ɵɵconditionalCreate(20, MJAIAgentRunFormComponentExtended_Conditional_56_Conditional_20_Template, 2, 1, "a", 59);
|
|
574
|
+
i0.ɵɵconditionalCreate(21, MJAIAgentRunFormComponentExtended_Conditional_56_Conditional_21_Template, 2, 0, "span");
|
|
575
|
+
i0.ɵɵelementEnd()();
|
|
576
|
+
i0.ɵɵelementStart(22, "div", 58)(23, "label");
|
|
577
|
+
i0.ɵɵtext(24, "Conversation ID");
|
|
578
|
+
i0.ɵɵelementEnd();
|
|
579
|
+
i0.ɵɵelementStart(25, "span");
|
|
580
|
+
i0.ɵɵconditionalCreate(26, MJAIAgentRunFormComponentExtended_Conditional_56_Conditional_26_Template, 2, 1, "a", 59);
|
|
581
|
+
i0.ɵɵconditionalCreate(27, MJAIAgentRunFormComponentExtended_Conditional_56_Conditional_27_Template, 2, 0, "span");
|
|
582
|
+
i0.ɵɵelementEnd()();
|
|
583
|
+
i0.ɵɵelementStart(28, "div", 58)(29, "label");
|
|
584
|
+
i0.ɵɵtext(30, "User");
|
|
585
|
+
i0.ɵɵelementEnd();
|
|
586
|
+
i0.ɵɵelementStart(31, "span");
|
|
587
|
+
i0.ɵɵconditionalCreate(32, MJAIAgentRunFormComponentExtended_Conditional_56_Conditional_32_Template, 2, 1, "a", 59);
|
|
588
|
+
i0.ɵɵconditionalCreate(33, MJAIAgentRunFormComponentExtended_Conditional_56_Conditional_33_Template, 2, 0, "span");
|
|
589
|
+
i0.ɵɵelementEnd()()()();
|
|
590
|
+
i0.ɵɵelementStart(34, "mj-accordion-panel", 55);
|
|
591
|
+
i0.ɵɵtemplate(35, MJAIAgentRunFormComponentExtended_Conditional_56_ng_template_35_Template, 2, 0, "ng-template", 56);
|
|
592
|
+
i0.ɵɵelementStart(36, "div", 57)(37, "div", 58)(38, "label");
|
|
593
|
+
i0.ɵɵtext(39, "Override Model");
|
|
594
|
+
i0.ɵɵelementEnd();
|
|
595
|
+
i0.ɵɵelementStart(40, "span");
|
|
596
|
+
i0.ɵɵconditionalCreate(41, MJAIAgentRunFormComponentExtended_Conditional_56_Conditional_41_Template, 2, 1, "a", 59);
|
|
597
|
+
i0.ɵɵconditionalCreate(42, MJAIAgentRunFormComponentExtended_Conditional_56_Conditional_42_Template, 2, 0, "span");
|
|
598
|
+
i0.ɵɵelementEnd()();
|
|
599
|
+
i0.ɵɵelementStart(43, "div", 58)(44, "label");
|
|
600
|
+
i0.ɵɵtext(45, "Override Vendor");
|
|
601
|
+
i0.ɵɵelementEnd();
|
|
602
|
+
i0.ɵɵelementStart(46, "span");
|
|
603
|
+
i0.ɵɵconditionalCreate(47, MJAIAgentRunFormComponentExtended_Conditional_56_Conditional_47_Template, 2, 1, "a", 59);
|
|
604
|
+
i0.ɵɵconditionalCreate(48, MJAIAgentRunFormComponentExtended_Conditional_56_Conditional_48_Template, 2, 0, "span");
|
|
605
|
+
i0.ɵɵelementEnd()();
|
|
606
|
+
i0.ɵɵelementStart(49, "div", 58)(50, "label");
|
|
607
|
+
i0.ɵɵtext(51, "Verbose Logging");
|
|
608
|
+
i0.ɵɵelementEnd();
|
|
609
|
+
i0.ɵɵelementStart(52, "span");
|
|
610
|
+
i0.ɵɵtext(53);
|
|
611
|
+
i0.ɵɵelementEnd()()()();
|
|
612
|
+
i0.ɵɵelementStart(54, "mj-accordion-panel", 55);
|
|
613
|
+
i0.ɵɵtemplate(55, MJAIAgentRunFormComponentExtended_Conditional_56_ng_template_55_Template, 2, 0, "ng-template", 56);
|
|
614
|
+
i0.ɵɵelementStart(56, "div", 57)(57, "div", 58)(58, "label");
|
|
615
|
+
i0.ɵɵtext(59, "Status");
|
|
616
|
+
i0.ɵɵelementEnd();
|
|
617
|
+
i0.ɵɵelementStart(60, "span", 18);
|
|
618
|
+
i0.ɵɵtext(61);
|
|
619
|
+
i0.ɵɵelementEnd()();
|
|
620
|
+
i0.ɵɵelementStart(62, "div", 58)(63, "label");
|
|
621
|
+
i0.ɵɵtext(64, "Success");
|
|
622
|
+
i0.ɵɵelementEnd();
|
|
623
|
+
i0.ɵɵconditionalCreate(65, MJAIAgentRunFormComponentExtended_Conditional_56_Conditional_65_Template, 2, 0, "span")(66, MJAIAgentRunFormComponentExtended_Conditional_56_Conditional_66_Template, 2, 0, "span", 60)(67, MJAIAgentRunFormComponentExtended_Conditional_56_Conditional_67_Template, 2, 0, "span", 61);
|
|
691
624
|
i0.ɵɵelementEnd();
|
|
692
|
-
i0.ɵɵ
|
|
693
|
-
i0.ɵɵ
|
|
625
|
+
i0.ɵɵconditionalCreate(68, MJAIAgentRunFormComponentExtended_Conditional_56_Conditional_68_Template, 5, 1, "div", 62);
|
|
626
|
+
i0.ɵɵconditionalCreate(69, MJAIAgentRunFormComponentExtended_Conditional_56_Conditional_69_Template, 5, 1, "div", 62);
|
|
627
|
+
i0.ɵɵelementEnd()();
|
|
628
|
+
i0.ɵɵelementStart(70, "mj-accordion-panel", 55);
|
|
629
|
+
i0.ɵɵtemplate(71, MJAIAgentRunFormComponentExtended_Conditional_56_ng_template_71_Template, 2, 0, "ng-template", 56);
|
|
630
|
+
i0.ɵɵelementStart(72, "div", 57)(73, "div", 58)(74, "label");
|
|
631
|
+
i0.ɵɵtext(75, "Total Tokens Used");
|
|
632
|
+
i0.ɵɵelementEnd();
|
|
633
|
+
i0.ɵɵelementStart(76, "span");
|
|
634
|
+
i0.ɵɵtext(77);
|
|
635
|
+
i0.ɵɵpipe(78, "number");
|
|
636
|
+
i0.ɵɵelementEnd()();
|
|
637
|
+
i0.ɵɵelementStart(79, "div", 58)(80, "label");
|
|
638
|
+
i0.ɵɵtext(81, "Prompt Tokens");
|
|
694
639
|
i0.ɵɵelementEnd();
|
|
695
|
-
i0.ɵɵelementStart(
|
|
696
|
-
i0.ɵɵ
|
|
640
|
+
i0.ɵɵelementStart(82, "span");
|
|
641
|
+
i0.ɵɵtext(83);
|
|
642
|
+
i0.ɵɵpipe(84, "number");
|
|
643
|
+
i0.ɵɵelementEnd()();
|
|
644
|
+
i0.ɵɵelementStart(85, "div", 58)(86, "label");
|
|
645
|
+
i0.ɵɵtext(87, "Completion Tokens");
|
|
697
646
|
i0.ɵɵelementEnd();
|
|
698
|
-
i0.ɵɵ
|
|
699
|
-
i0.ɵɵ
|
|
700
|
-
i0.ɵɵ
|
|
701
|
-
i0.ɵɵconditionalCreate(13, MJAIAgentRunFormComponentExtended_Conditional_56_Conditional_13_Template, 2, 0, "kendo-panelbar-item", 65);
|
|
702
|
-
i0.ɵɵconditionalCreate(14, MJAIAgentRunFormComponentExtended_Conditional_56_Conditional_14_Template, 2, 0, "kendo-panelbar-item", 66);
|
|
647
|
+
i0.ɵɵelementStart(88, "span");
|
|
648
|
+
i0.ɵɵtext(89);
|
|
649
|
+
i0.ɵɵpipe(90, "number");
|
|
703
650
|
i0.ɵɵelementEnd()();
|
|
651
|
+
i0.ɵɵelementStart(91, "div", 58)(92, "label");
|
|
652
|
+
i0.ɵɵtext(93, "Total Cost");
|
|
653
|
+
i0.ɵɵelementEnd();
|
|
654
|
+
i0.ɵɵelementStart(94, "span");
|
|
655
|
+
i0.ɵɵtext(95);
|
|
656
|
+
i0.ɵɵpipe(96, "number");
|
|
657
|
+
i0.ɵɵelementEnd()();
|
|
658
|
+
i0.ɵɵelementStart(97, "div", 58)(98, "label");
|
|
659
|
+
i0.ɵɵtext(99, "Total Prompt Iterations");
|
|
660
|
+
i0.ɵɵelementEnd();
|
|
661
|
+
i0.ɵɵelementStart(100, "span");
|
|
662
|
+
i0.ɵɵtext(101);
|
|
663
|
+
i0.ɵɵpipe(102, "number");
|
|
664
|
+
i0.ɵɵelementEnd()()()();
|
|
665
|
+
i0.ɵɵconditionalCreate(103, MJAIAgentRunFormComponentExtended_Conditional_56_Conditional_103_Template, 5, 2, "mj-accordion-panel", 55);
|
|
666
|
+
i0.ɵɵconditionalCreate(104, MJAIAgentRunFormComponentExtended_Conditional_56_Conditional_104_Template, 5, 2, "mj-accordion-panel", 55);
|
|
667
|
+
i0.ɵɵconditionalCreate(105, MJAIAgentRunFormComponentExtended_Conditional_56_Conditional_105_Template, 5, 2, "mj-accordion-panel", 55);
|
|
668
|
+
i0.ɵɵconditionalCreate(106, MJAIAgentRunFormComponentExtended_Conditional_56_Conditional_106_Template, 5, 2, "mj-accordion-panel", 55);
|
|
669
|
+
i0.ɵɵconditionalCreate(107, MJAIAgentRunFormComponentExtended_Conditional_56_Conditional_107_Template, 5, 2, "mj-accordion-panel", 55);
|
|
670
|
+
i0.ɵɵelementEnd();
|
|
704
671
|
} if (rf & 2) {
|
|
705
672
|
const ctx_r0 = i0.ɵɵnextContext();
|
|
706
673
|
i0.ɵɵadvance();
|
|
707
|
-
i0.ɵɵproperty("
|
|
708
|
-
i0.ɵɵadvance();
|
|
709
|
-
i0.ɵɵproperty("expanded", true);
|
|
674
|
+
i0.ɵɵproperty("Expanded", true);
|
|
710
675
|
i0.ɵɵadvance(8);
|
|
711
|
-
i0.ɵɵ
|
|
676
|
+
i0.ɵɵtextInterpolate1(" ", (ctx_r0.agent == null ? null : ctx_r0.agent.Name) || "N/A", " ");
|
|
677
|
+
i0.ɵɵadvance(5);
|
|
678
|
+
i0.ɵɵconditional(ctx_r0.record.ParentRunID ? 14 : -1);
|
|
679
|
+
i0.ɵɵadvance();
|
|
680
|
+
i0.ɵɵconditional(!ctx_r0.record.ParentRunID ? 15 : -1);
|
|
681
|
+
i0.ɵɵadvance(5);
|
|
682
|
+
i0.ɵɵconditional(ctx_r0.record.LastRunID ? 20 : -1);
|
|
683
|
+
i0.ɵɵadvance();
|
|
684
|
+
i0.ɵɵconditional(!ctx_r0.record.LastRunID ? 21 : -1);
|
|
685
|
+
i0.ɵɵadvance(5);
|
|
686
|
+
i0.ɵɵconditional(ctx_r0.record.ConversationID ? 26 : -1);
|
|
687
|
+
i0.ɵɵadvance();
|
|
688
|
+
i0.ɵɵconditional(!ctx_r0.record.ConversationID ? 27 : -1);
|
|
689
|
+
i0.ɵɵadvance(5);
|
|
690
|
+
i0.ɵɵconditional(ctx_r0.record.UserID ? 32 : -1);
|
|
691
|
+
i0.ɵɵadvance();
|
|
692
|
+
i0.ɵɵconditional(!ctx_r0.record.UserID ? 33 : -1);
|
|
693
|
+
i0.ɵɵadvance();
|
|
694
|
+
i0.ɵɵproperty("Expanded", false);
|
|
695
|
+
i0.ɵɵadvance(7);
|
|
696
|
+
i0.ɵɵconditional(ctx_r0.record.OverrideModelID ? 41 : -1);
|
|
697
|
+
i0.ɵɵadvance();
|
|
698
|
+
i0.ɵɵconditional(!ctx_r0.record.OverrideModelID ? 42 : -1);
|
|
699
|
+
i0.ɵɵadvance(5);
|
|
700
|
+
i0.ɵɵconditional(ctx_r0.record.OverrideVendorID ? 47 : -1);
|
|
701
|
+
i0.ɵɵadvance();
|
|
702
|
+
i0.ɵɵconditional(!ctx_r0.record.OverrideVendorID ? 48 : -1);
|
|
703
|
+
i0.ɵɵadvance(5);
|
|
704
|
+
i0.ɵɵtextInterpolate(ctx_r0.record.Verbose ? "Yes" : "No");
|
|
705
|
+
i0.ɵɵadvance();
|
|
706
|
+
i0.ɵɵproperty("Expanded", false);
|
|
707
|
+
i0.ɵɵadvance(6);
|
|
708
|
+
i0.ɵɵattribute("data-status", ctx_r0.record.Status);
|
|
709
|
+
i0.ɵɵadvance();
|
|
710
|
+
i0.ɵɵtextInterpolate1(" ", ctx_r0.record.Status, " ");
|
|
711
|
+
i0.ɵɵadvance(4);
|
|
712
|
+
i0.ɵɵconditional(ctx_r0.record.Success === null ? 65 : ctx_r0.record.Success ? 66 : 67);
|
|
713
|
+
i0.ɵɵadvance(3);
|
|
714
|
+
i0.ɵɵconditional(ctx_r0.record.Message ? 68 : -1);
|
|
715
|
+
i0.ɵɵadvance();
|
|
716
|
+
i0.ɵɵconditional(ctx_r0.record.ErrorMessage ? 69 : -1);
|
|
717
|
+
i0.ɵɵadvance();
|
|
718
|
+
i0.ɵɵproperty("Expanded", false);
|
|
719
|
+
i0.ɵɵadvance(7);
|
|
720
|
+
i0.ɵɵtextInterpolate(ctx_r0.record.TotalTokensUsed ? i0.ɵɵpipeBind2(78, 33, ctx_r0.record.TotalTokensUsed, "1.0-0") : "N/A");
|
|
721
|
+
i0.ɵɵadvance(6);
|
|
722
|
+
i0.ɵɵtextInterpolate(ctx_r0.record.TotalPromptTokensUsed ? i0.ɵɵpipeBind2(84, 36, ctx_r0.record.TotalPromptTokensUsed, "1.0-0") : "N/A");
|
|
723
|
+
i0.ɵɵadvance(6);
|
|
724
|
+
i0.ɵɵtextInterpolate(ctx_r0.record.TotalCompletionTokensUsed ? i0.ɵɵpipeBind2(90, 39, ctx_r0.record.TotalCompletionTokensUsed, "1.0-0") : "N/A");
|
|
725
|
+
i0.ɵɵadvance(6);
|
|
726
|
+
i0.ɵɵtextInterpolate(ctx_r0.record.TotalCost != null ? "$" + i0.ɵɵpipeBind2(96, 42, ctx_r0.record.TotalCost, "1.2-4") : "N/A");
|
|
727
|
+
i0.ɵɵadvance(6);
|
|
728
|
+
i0.ɵɵtextInterpolate(ctx_r0.record.TotalPromptIterations != null ? i0.ɵɵpipeBind2(102, 45, ctx_r0.record.TotalPromptIterations, "1.0-0") : "N/A");
|
|
729
|
+
i0.ɵɵadvance(2);
|
|
730
|
+
i0.ɵɵconditional(ctx_r0.record.Result ? 103 : -1);
|
|
712
731
|
i0.ɵɵadvance();
|
|
713
|
-
i0.ɵɵconditional(ctx_r0.record.StartingPayload ?
|
|
732
|
+
i0.ɵɵconditional(ctx_r0.record.StartingPayload ? 104 : -1);
|
|
714
733
|
i0.ɵɵadvance();
|
|
715
|
-
i0.ɵɵconditional(ctx_r0.record.Data ?
|
|
734
|
+
i0.ɵɵconditional(ctx_r0.record.Data ? 105 : -1);
|
|
716
735
|
i0.ɵɵadvance();
|
|
717
|
-
i0.ɵɵconditional(ctx_r0.record.FinalPayload ?
|
|
736
|
+
i0.ɵɵconditional(ctx_r0.record.FinalPayload ? 106 : -1);
|
|
718
737
|
i0.ɵɵadvance();
|
|
719
|
-
i0.ɵɵconditional(ctx_r0.showPayloadDiff ?
|
|
738
|
+
i0.ɵɵconditional(ctx_r0.showPayloadDiff ? 107 : -1);
|
|
720
739
|
} }
|
|
721
740
|
let MJAIAgentRunFormComponentExtended = class MJAIAgentRunFormComponentExtended extends MJAIAgentRunFormComponent {
|
|
722
741
|
constructor() {
|
|
@@ -773,6 +792,7 @@ let MJAIAgentRunFormComponentExtended = class MJAIAgentRunFormComponentExtended
|
|
|
773
792
|
const agent = await md.GetEntityObject('MJ: AI Agents');
|
|
774
793
|
if (agent && await agent.Load(this.record.AgentID)) {
|
|
775
794
|
this.agent = agent;
|
|
795
|
+
this.cdr.detectChanges();
|
|
776
796
|
}
|
|
777
797
|
}
|
|
778
798
|
catch (error) {
|
|
@@ -1264,7 +1284,7 @@ let MJAIAgentRunFormComponentExtended = class MJAIAgentRunFormComponentExtended
|
|
|
1264
1284
|
i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.timelineComponent = _t.first);
|
|
1265
1285
|
i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.analyticsComponent = _t.first);
|
|
1266
1286
|
i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.visualizationComponent = _t.first);
|
|
1267
|
-
} }, standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls: 57, vars: 33, consts: [["visualizationComponent", ""], ["analyticsComponent", ""], [1, "record-form-container", "ai-agent-run-form"], [1, "record-form"], [1, "header"], [1, "header-content"], [1, "header-left"], [1, "icon-wrapper"], [1, "agent-logo", 3, "src", "alt"], [1, "fas", 3, "ngClass"], [1, "fas", "fa-robot"], [1, "header-info"], [1, "meta-info"], [1, "agent-name"], [1, "run-id"], [1, "parent-run"], ["title", "Open conversation in Chat app", 1, "conversation-pill"], [1, "header-right"], [1, "status-badge"], [1, "header-actions"], ["title", "Refresh", 1, "btn-icon", 3, "click"], [1, "fas", "fa-sync-alt"], [1, "header-stats"], [1, "stat"], [1, "label"], [1, "value"], [1, "configuration-bar"], [1, "tabs"], [1, "tab", 3, "click"], [1, "fas", "fa-stream"], [1, "fas", "fa-diagram-project"], [1, "fas", "fa-chart-line"], [1, "fas", "fa-info-circle"], [1, "content-area"], [1, "tab-content", 2, "height", "100%"], [1, "tab-content"], ["href", "javascript:void(0)", 1, "entity-link", 3, "click"], [1, "fas", "fa-level-up-alt"], [1, "parent-link", 3, "click"], ["title", "Open conversation in Chat app", 1, "conversation-pill", 3, "click"], [1, "fas", "fa-comments"], [1, "fas", "fa-external-link-alt", "pill-action"], [1, "value", "loading"], [1, "fas", "fa-spinner", "fa-spin"], [1, "config-item"], [1, "fas", "fa-cog"], [1, "config-content"], [1, "config-label"], [1, "config-value"], ["
|
|
1287
|
+
} }, standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls: 57, vars: 33, consts: [["visualizationComponent", ""], ["analyticsComponent", ""], [1, "record-form-container", "ai-agent-run-form"], [1, "record-form"], [1, "header"], [1, "header-content"], [1, "header-left"], [1, "icon-wrapper"], [1, "agent-logo", 3, "src", "alt"], [1, "fas", 3, "ngClass"], [1, "fas", "fa-robot"], [1, "header-info"], [1, "meta-info"], [1, "agent-name"], [1, "run-id"], [1, "parent-run"], ["title", "Open conversation in Chat app", 1, "conversation-pill"], [1, "header-right"], [1, "status-badge"], [1, "header-actions"], ["title", "Refresh", 1, "btn-icon", 3, "click"], [1, "fas", "fa-sync-alt"], [1, "header-stats"], [1, "stat"], [1, "label"], [1, "value"], [1, "configuration-bar"], [1, "tabs"], [1, "tab", 3, "click"], [1, "fas", "fa-stream"], [1, "fas", "fa-diagram-project"], [1, "fas", "fa-chart-line"], [1, "fas", "fa-info-circle"], [1, "content-area"], [1, "tab-content", 2, "height", "100%"], [1, "tab-content"], ["href", "javascript:void(0)", 1, "entity-link", 3, "click"], [1, "fas", "fa-level-up-alt"], [1, "parent-link", 3, "click"], ["title", "Open conversation in Chat app", 1, "conversation-pill", 3, "click"], [1, "fas", "fa-comments"], [1, "fas", "fa-external-link-alt", "pill-action"], [1, "value", "loading"], [1, "fas", "fa-spinner", "fa-spin"], [1, "config-item"], [1, "fas", "fa-cog"], [1, "config-content"], [1, "config-label"], [1, "config-value"], ["direction", "horizontal", 2, "height", "100%"], [3, "size"], [3, "itemSelected", "navigateToEntity", "agentRunCompleted", "aiAgentRunId", "dataHelper", "autoRefresh", "refreshInterval"], [3, "closePanel", "navigateToActionLog", "copyToClipboard", "selectedTimelineItem"], [3, "aiAgentRunId", "dataHelper"], [3, "agentRunId"], [3, "Expanded"], ["mjAccordionTitle", ""], [1, "details-grid"], [1, "detail-item"], ["href", "javascript:void(0)", 1, "entity-link"], [1, "success"], [1, "error-message"], [1, "detail-item", "full-width"], [1, "fas", "fa-cogs"], [1, "fas", "fa-tasks"], [1, "message"], [1, "fas", "fa-dollar-sign"], [1, "result-viewer"], [2, "height", "300px", "width", "100%", 3, "ngModel", "language", "readonly"], [2, "padding", "20px", "text-align", "center", "color", "var(--mj-text-muted)"], [1, "fas", "fa-code"], [1, "fas", "fa-upload"], [1, "fas", "fa-database"], [1, "fas", "fa-download"], [2, "padding", "20px", "background", "var(--mj-bg-surface-card)"], [3, "oldValue", "newValue", "title", "showSummary", "showUnchanged", "expandAll", "maxDepth", "maxStringLength", "treatNullAsUndefined"], [1, "fas", "fa-code-compare"]], template: function MJAIAgentRunFormComponentExtended_Template(rf, ctx) { if (rf & 1) {
|
|
1268
1288
|
i0.ɵɵelementStart(0, "div", 2)(1, "div", 3)(2, "div", 4)(3, "div", 5)(4, "div", 6)(5, "div", 7);
|
|
1269
1289
|
i0.ɵɵconditionalCreate(6, MJAIAgentRunFormComponentExtended_Conditional_6_Template, 1, 2, "img", 8);
|
|
1270
1290
|
i0.ɵɵconditionalCreate(7, MJAIAgentRunFormComponentExtended_Conditional_7_Template, 1, 1, "i", 9);
|
|
@@ -1326,10 +1346,10 @@ let MJAIAgentRunFormComponentExtended = class MJAIAgentRunFormComponentExtended
|
|
|
1326
1346
|
i0.ɵɵtext(51, " Details ");
|
|
1327
1347
|
i0.ɵɵelementEnd()();
|
|
1328
1348
|
i0.ɵɵelementStart(52, "div", 33);
|
|
1329
|
-
i0.ɵɵconditionalCreate(53, MJAIAgentRunFormComponentExtended_Conditional_53_Template,
|
|
1349
|
+
i0.ɵɵconditionalCreate(53, MJAIAgentRunFormComponentExtended_Conditional_53_Template, 5, 6, "div", 34);
|
|
1330
1350
|
i0.ɵɵconditionalCreate(54, MJAIAgentRunFormComponentExtended_Conditional_54_Template, 2, 1, "div", 34);
|
|
1331
1351
|
i0.ɵɵconditionalCreate(55, MJAIAgentRunFormComponentExtended_Conditional_55_Template, 2, 1, "div", 34);
|
|
1332
|
-
i0.ɵɵconditionalCreate(56, MJAIAgentRunFormComponentExtended_Conditional_56_Template,
|
|
1352
|
+
i0.ɵɵconditionalCreate(56, MJAIAgentRunFormComponentExtended_Conditional_56_Template, 108, 48, "div", 35);
|
|
1333
1353
|
i0.ɵɵelementEnd()()();
|
|
1334
1354
|
} if (rf & 2) {
|
|
1335
1355
|
i0.ɵɵadvance(6);
|
|
@@ -1384,7 +1404,7 @@ let MJAIAgentRunFormComponentExtended = class MJAIAgentRunFormComponentExtended
|
|
|
1384
1404
|
i0.ɵɵconditional(ctx.activeTab === "analytics" ? 55 : -1);
|
|
1385
1405
|
i0.ɵɵadvance();
|
|
1386
1406
|
i0.ɵɵconditional(ctx.activeTab === "details" ? 56 : -1);
|
|
1387
|
-
} }, dependencies: [i1.NgClass, i2.NgControlStatus, i2.NgModel, i3.PanelBarComponent, i3.PanelBarItemComponent, i3.PanelBarContentDirective, i3.SplitterComponent, i3.SplitterPaneComponent, i4.CodeEditorComponent, i5.DeepDiffComponent, i6.AIAgentRunTimelineComponent, i7.AIAgentRunAnalyticsComponent, i8.AIAgentRunVisualizationComponent, i9.AIAgentRunStepDetailComponent, i1.DecimalPipe, i1.DatePipe], styles: [".ai-agent-run-form[_ngcontent-%COMP%] {\n height: 100%;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n}\n\n.record-form-container.ai-agent-run-form[_ngcontent-%COMP%] > .record-form[_ngcontent-%COMP%], \n.ai-agent-run-form[_ngcontent-%COMP%] > .record-form[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n height: 100%;\n min-height: 0;\n}\n\n\n\n.header[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface);\n border-bottom: 1px solid var(--mj-border-default);\n padding: 20px;\n box-shadow: var(--mj-shadow-sm);\n flex-shrink: 0;\n}\n\n.header-content[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n margin-bottom: 16px;\n}\n\n.header-left[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 16px;\n}\n\n.icon-wrapper[_ngcontent-%COMP%] {\n width: 48px;\n height: 48px;\n background: var(--mj-brand-primary);\n border-radius: 12px;\n display: flex;\n align-items: center;\n justify-content: center;\n color: var(--mj-text-inverse);\n font-size: 20px;\n overflow: hidden;\n}\n\n.agent-logo[_ngcontent-%COMP%] {\n width: 100%;\n height: 100%;\n object-fit: cover;\n}\n\n.header-info[_ngcontent-%COMP%] h2[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 24px;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n.meta-info[_ngcontent-%COMP%] {\n display: flex;\n gap: 12px;\n margin-top: 4px;\n font-size: 14px;\n color: var(--mj-text-muted);\n}\n\n.parent-run[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.parent-link[_ngcontent-%COMP%] {\n color: var(--mj-status-error);\n text-decoration: none;\n cursor: pointer;\n transition: color 0.2s;\n}\n\n.parent-link[_ngcontent-%COMP%]:hover {\n color: var(--mj-status-error);\n text-decoration: underline;\n}\n\n.agent-name[_ngcontent-%COMP%] {\n font-weight: 500;\n color: var(--mj-text-secondary);\n}\n\n.run-id[_ngcontent-%COMP%] {\n font-family: monospace;\n font-size: 12px;\n opacity: 0.7;\n}\n\n\n\n.conversation-pill[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 4px 10px;\n background: color-mix(in srgb, var(--mj-brand-primary) 8%, var(--mj-bg-surface));\n border: 1px solid color-mix(in srgb, var(--mj-brand-primary) 20%, transparent);\n border-radius: 16px;\n font-size: 12px;\n font-weight: 500;\n color: var(--mj-brand-primary);\n cursor: pointer;\n transition: all 0.2s ease;\n white-space: nowrap;\n}\n\n.conversation-pill[_ngcontent-%COMP%]:hover {\n background: color-mix(in srgb, var(--mj-brand-primary) 15%, var(--mj-bg-surface));\n border-color: color-mix(in srgb, var(--mj-brand-primary) 40%, transparent);\n transform: translateY(-1px);\n box-shadow: 0 2px 8px color-mix(in srgb, var(--mj-brand-primary) 15%, transparent);\n}\n\n.conversation-pill[_ngcontent-%COMP%] i[_ngcontent-%COMP%]:first-child {\n font-size: 11px;\n opacity: 0.9;\n}\n\n.conversation-pill[_ngcontent-%COMP%] .pill-action[_ngcontent-%COMP%] {\n font-size: 9px;\n opacity: 0.6;\n transition: opacity 0.2s ease;\n}\n\n.conversation-pill[_ngcontent-%COMP%]:hover .pill-action[_ngcontent-%COMP%] {\n opacity: 1;\n}\n\n.header-right[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 16px;\n}\n\n.status-badge[_ngcontent-%COMP%] {\n padding: 6px 16px;\n border-radius: 20px;\n font-size: 13px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n display: inline-flex;\n align-items: center;\n gap: 6px;\n}\n\n.status-badge[data-status=\"Running\"][_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-info) 15%, var(--mj-bg-surface));\n color: var(--mj-status-info);\n}\n\n.status-badge[data-status=\"Completed\"][_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-success) 15%, var(--mj-bg-surface));\n color: var(--mj-status-success);\n}\n\n.status-badge[data-status=\"Failed\"][_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-error) 15%, var(--mj-bg-surface));\n color: var(--mj-status-error);\n}\n\n.status-badge[data-status=\"Cancelled\"][_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-warning) 15%, var(--mj-bg-surface));\n color: var(--mj-status-warning);\n}\n\n.status-badge[data-status=\"Paused\"][_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-secondary);\n}\n\n.status-badge.small[_ngcontent-%COMP%] {\n padding: 4px 12px;\n font-size: 11px;\n}\n\n.header-actions[_ngcontent-%COMP%] {\n display: flex;\n gap: 8px;\n}\n\n.btn-icon[_ngcontent-%COMP%] {\n width: 36px;\n height: 36px;\n border: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface);\n border-radius: 8px;\n display: flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n transition: all 0.2s ease;\n color: var(--mj-text-muted);\n}\n\n.btn-icon[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-sunken);\n border-color: var(--mj-border-strong);\n color: var(--mj-text-secondary);\n}\n\n.header-stats[_ngcontent-%COMP%] {\n display: flex;\n gap: 24px;\n padding-top: 12px;\n border-top: 1px solid var(--mj-border-default);\n}\n\n\n\n.configuration-bar[_ngcontent-%COMP%] {\n display: flex;\n gap: 24px;\n padding-top: 16px;\n border-top: 1px solid var(--mj-border-default);\n margin-top: 16px;\n}\n\n.config-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n.config-item[_ngcontent-%COMP%] > i[_ngcontent-%COMP%] {\n font-size: 1.2em;\n color: var(--mj-text-muted);\n width: 24px;\n text-align: center;\n}\n\n.config-content[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n}\n\n.config-label[_ngcontent-%COMP%] {\n font-size: 12px;\n color: var(--mj-text-muted);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.config-value[_ngcontent-%COMP%] {\n font-size: 14px;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n.config-value[_ngcontent-%COMP%] .entity-link[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n text-decoration: none;\n cursor: pointer;\n transition: color 0.2s;\n}\n\n.config-value[_ngcontent-%COMP%] .entity-link[_ngcontent-%COMP%]:hover {\n color: var(--mj-brand-primary-hover);\n text-decoration: underline;\n}\n\n.stat[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 4px;\n}\n\n.stat[_ngcontent-%COMP%] .label[_ngcontent-%COMP%] {\n font-size: 12px;\n color: var(--mj-text-muted);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.stat[_ngcontent-%COMP%] .value[_ngcontent-%COMP%] {\n font-size: 14px;\n font-weight: 500;\n color: var(--mj-text-secondary);\n}\n\n.stat[_ngcontent-%COMP%] .value.success[_ngcontent-%COMP%] {\n color: var(--mj-status-success);\n}\n\n.stat[_ngcontent-%COMP%] .value.error[_ngcontent-%COMP%] {\n color: var(--mj-status-error);\n}\n\n\n\n.tabs[_ngcontent-%COMP%] {\n display: flex;\n border-bottom: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface-sunken);\n flex-shrink: 0;\n}\n\n.tab[_ngcontent-%COMP%] {\n padding: 12px 24px;\n border: none;\n background: transparent;\n cursor: pointer;\n font-size: 14px;\n font-weight: 500;\n color: var(--mj-text-muted);\n display: flex;\n align-items: center;\n gap: 8px;\n transition: all 0.2s ease;\n border-bottom: 3px solid transparent;\n}\n\n.tab[_ngcontent-%COMP%]:hover {\n color: var(--mj-text-secondary);\n background: color-mix(in srgb, var(--mj-text-primary) 2%, var(--mj-bg-surface));\n}\n\n.tab.active[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n border-bottom-color: var(--mj-brand-primary);\n background: var(--mj-bg-surface);\n}\n\n\n\n.content-area[_ngcontent-%COMP%] {\n position: relative;\n flex: 1;\n min-height: 0;\n overflow: auto;\n background: var(--mj-bg-surface);\n}\n\n.tab-content[_ngcontent-%COMP%] {\n height: 100%;\n min-height: 0;\n overflow: auto;\n}\n\n\n\n.tab-content[ng-reflect-ng-if=\"true\"][_ngcontent-%COMP%] > kendo-panelbar[_ngcontent-%COMP%] {\n height: 100%;\n overflow-y: auto;\n}\n\n\n\n.json-detail-pane[_ngcontent-%COMP%] {\n height: 100%;\n display: flex;\n flex-direction: column;\n background: var(--mj-bg-surface-sunken);\n border-left: 1px solid var(--mj-border-default);\n}\n\n.json-pane-header[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 16px 20px;\n background: var(--mj-bg-surface);\n border-bottom: 1px solid var(--mj-border-default);\n box-shadow: var(--mj-shadow-sm);\n}\n\n.json-pane-header[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 16px;\n font-weight: 600;\n color: var(--mj-text-primary);\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.json-pane-header[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-text-muted);\n font-size: 14px;\n}\n\n.json-pane-content[_ngcontent-%COMP%] {\n flex: 1;\n display: flex;\n flex-direction: column;\n overflow: auto;\n padding: 16px;\n}\n\n.json-meta[_ngcontent-%COMP%] {\n display: flex;\n gap: 20px;\n margin-bottom: 16px;\n flex-wrap: wrap;\n}\n\n.json-meta[_ngcontent-%COMP%] .meta-item[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 4px;\n}\n\n.json-meta[_ngcontent-%COMP%] .meta-item[_ngcontent-%COMP%] label[_ngcontent-%COMP%] {\n font-size: 11px;\n text-transform: uppercase;\n color: var(--mj-text-muted);\n font-weight: 600;\n letter-spacing: 0.5px;\n}\n\n.json-meta[_ngcontent-%COMP%] .meta-item[_ngcontent-%COMP%] span[_ngcontent-%COMP%] {\n font-size: 14px;\n color: var(--mj-text-primary);\n font-weight: 500;\n}\n\n.action-link[_ngcontent-%COMP%] {\n margin-bottom: 12px;\n}\n\n.action-link[_ngcontent-%COMP%] .btn-link[_ngcontent-%COMP%] {\n background: none;\n border: none;\n color: var(--mj-brand-primary);\n font-size: 14px;\n cursor: pointer;\n padding: 6px 12px;\n border-radius: 4px;\n transition: all 0.2s;\n display: inline-flex;\n align-items: center;\n gap: 6px;\n}\n\n.action-link[_ngcontent-%COMP%] .btn-link[_ngcontent-%COMP%]:hover {\n background: color-mix(in srgb, var(--mj-brand-primary) 8%, var(--mj-bg-surface));\n color: var(--mj-brand-primary-hover);\n}\n\n.json-viewer[_ngcontent-%COMP%] {\n flex: 1;\n display: flex;\n flex-direction: column;\n background: var(--mj-bg-surface);\n border-radius: 8px;\n border: 1px solid var(--mj-border-default);\n overflow: auto;\n padding: 20px;\n gap: 10px;\n min-height: 0;\n margin-bottom: 45px;\n}\n\n\n.json-toolbar[_ngcontent-%COMP%] {\n display: flex;\n justify-content: flex-end;\n padding: 8px 12px;\n background: var(--mj-bg-surface-sunken);\n border-bottom: 1px solid var(--mj-border-default);\n}\n\n\n\n.timeline-container[_ngcontent-%COMP%] {\n height: 100%;\n overflow-y: auto;\n padding: 20px;\n}\n\n.timeline-container[_ngcontent-%COMP%] > .timeline[_ngcontent-%COMP%] {\n max-width: 900px;\n margin: 0 auto;\n}\n\n.timeline[_ngcontent-%COMP%] {\n position: relative;\n padding-left: 40px;\n}\n\n.timeline[_ngcontent-%COMP%]::before {\n content: '';\n position: absolute;\n left: 20px;\n top: 0;\n bottom: 0;\n width: 2px;\n background: var(--mj-border-default);\n}\n\n.timeline-item[_ngcontent-%COMP%] {\n position: relative;\n margin-bottom: 24px;\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.timeline-item[_ngcontent-%COMP%]:hover {\n transform: translateX(4px);\n}\n\n.timeline-item.selected[_ngcontent-%COMP%] {\n transform: translateX(8px);\n}\n\n.timeline-item.selected[_ngcontent-%COMP%] .timeline-content[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 8%, var(--mj-bg-surface));\n border-color: var(--mj-brand-primary);\n}\n\n.timeline-marker[_ngcontent-%COMP%] {\n position: absolute;\n left: -30px;\n top: 0;\n width: 40px;\n height: 40px;\n border-radius: 50%;\n display: flex;\n align-items: center;\n justify-content: center;\n background: var(--mj-bg-surface);\n border: 3px solid var(--mj-border-default);\n z-index: 1;\n transition: all 0.2s ease;\n}\n\n.timeline-marker[data-color=\"success\"][_ngcontent-%COMP%] {\n border-color: var(--mj-status-success);\n color: var(--mj-status-success);\n}\n\n.timeline-marker[data-color=\"error\"][_ngcontent-%COMP%] {\n border-color: var(--mj-status-error);\n color: var(--mj-status-error);\n}\n\n.timeline-marker[data-color=\"info\"][_ngcontent-%COMP%] {\n border-color: var(--mj-status-info);\n color: var(--mj-status-info);\n}\n\n.timeline-marker[data-color=\"warning\"][_ngcontent-%COMP%] {\n border-color: var(--mj-status-warning);\n color: var(--mj-status-warning);\n}\n\n.timeline-marker[data-color=\"secondary\"][_ngcontent-%COMP%] {\n border-color: var(--mj-text-muted);\n color: var(--mj-text-muted);\n}\n\n.timeline-marker.small[_ngcontent-%COMP%] {\n width: 28px;\n height: 28px;\n font-size: 12px;\n}\n\n.timeline-content[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-radius: 12px;\n padding: 16px 20px;\n margin-left: 20px;\n box-shadow: var(--mj-shadow-sm);\n transition: all 0.2s ease;\n}\n\n.timeline-header[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 8px;\n}\n\n.timeline-header[_ngcontent-%COMP%] h4[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 16px;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n.timeline-header[_ngcontent-%COMP%] h5[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 14px;\n font-weight: 600;\n color: var(--mj-text-secondary);\n}\n\n.timeline-time[_ngcontent-%COMP%] {\n font-size: 12px;\n color: var(--mj-text-muted);\n font-family: monospace;\n}\n\n.timeline-subtitle[_ngcontent-%COMP%] {\n font-size: 13px;\n color: var(--mj-text-muted);\n margin-bottom: 8px;\n}\n\n.timeline-meta[_ngcontent-%COMP%] {\n display: flex;\n gap: 16px;\n font-size: 12px;\n color: var(--mj-text-muted);\n}\n\n.timeline-meta[_ngcontent-%COMP%] .status[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 2px 8px;\n border-radius: 12px;\n font-size: 11px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.timeline-meta[_ngcontent-%COMP%] .status[data-status=\"Completed\"][_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-success) 15%, var(--mj-bg-surface));\n color: var(--mj-status-success);\n}\n\n.timeline-meta[_ngcontent-%COMP%] .status[data-status=\"Failed\"][_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-error) 15%, var(--mj-bg-surface));\n color: var(--mj-status-error);\n}\n\n.timeline-meta[_ngcontent-%COMP%] .status[data-status=\"Running\"][_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-info) 15%, var(--mj-bg-surface));\n color: var(--mj-status-info);\n}\n\n.timeline-meta[_ngcontent-%COMP%] .status[data-status=\"Paused\"][_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-secondary);\n}\n\n.duration[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 4px;\n}\n\n.timeline-actions[_ngcontent-%COMP%] {\n position: absolute;\n right: 20px;\n top: 50%;\n transform: translateY(-50%);\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.btn-link[_ngcontent-%COMP%] {\n background: none;\n border: none;\n color: var(--mj-brand-primary);\n cursor: pointer;\n font-size: 12px;\n display: flex;\n align-items: center;\n gap: 4px;\n padding: 4px 8px;\n border-radius: 4px;\n transition: all 0.2s ease;\n}\n\n.btn-link[_ngcontent-%COMP%]:hover {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n}\n\n.btn-expand[_ngcontent-%COMP%] {\n width: 24px;\n height: 24px;\n border: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface);\n border-radius: 4px;\n display: flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n transition: all 0.2s ease;\n color: var(--mj-text-muted);\n font-size: 12px;\n}\n\n.btn-expand[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-sunken);\n border-color: var(--mj-border-strong);\n color: var(--mj-text-secondary);\n}\n\n\n\n.timeline-children[_ngcontent-%COMP%] {\n position: relative;\n margin-top: 12px;\n margin-bottom: 12px;\n}\n\n.timeline-children[_ngcontent-%COMP%]::before {\n content: '';\n position: absolute;\n left: -10px;\n top: -12px;\n bottom: 0;\n width: 2px;\n background: var(--mj-border-default);\n}\n\n.child-item[_ngcontent-%COMP%] {\n margin-bottom: 12px;\n}\n\n.child-item[_ngcontent-%COMP%] .timeline-content[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-sunken);\n border-color: var(--mj-border-default);\n}\n\n\n\n.sub-run-timeline[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 2%, var(--mj-bg-surface));\n border-left: 2px solid color-mix(in srgb, var(--mj-brand-primary) 20%, transparent);\n margin-left: 20px;\n padding-left: 20px;\n margin-top: 8px;\n margin-bottom: 8px;\n}\n\n.sub-run-item[_ngcontent-%COMP%] .timeline-marker[_ngcontent-%COMP%] {\n border-width: 2px;\n}\n\n.sub-run-item[_ngcontent-%COMP%] .timeline-content[_ngcontent-%COMP%] {\n transition: all 0.2s ease;\n}\n\n\n\n.json-detail-pane[_ngcontent-%COMP%] {\n height: 100%;\n display: flex;\n flex-direction: column;\n background: var(--mj-bg-surface);\n border-left: 1px solid var(--mj-border-default);\n}\n\n.json-pane-header[_ngcontent-%COMP%] {\n padding: 16px 20px;\n background: var(--mj-bg-surface-sunken);\n border-bottom: 1px solid var(--mj-border-default);\n display: flex;\n justify-content: space-between;\n align-items: center;\n flex-shrink: 0;\n}\n\n.json-pane-header[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 16px;\n color: var(--mj-text-primary);\n display: flex;\n align-items: center;\n gap: 10px;\n font-weight: 600;\n}\n\n.json-pane-content[_ngcontent-%COMP%] {\n flex: 1;\n overflow-y: auto;\n display: flex;\n flex-direction: column;\n}\n\n.json-meta[_ngcontent-%COMP%] {\n padding: 16px 20px;\n border-bottom: 1px solid var(--mj-border-default);\n display: flex;\n gap: 20px;\n flex-wrap: wrap;\n flex-shrink: 0;\n}\n\n.json-meta[_ngcontent-%COMP%] .meta-item[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 4px;\n}\n\n.json-meta[_ngcontent-%COMP%] label[_ngcontent-%COMP%] {\n font-size: 11px;\n color: var(--mj-text-muted);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.json-meta[_ngcontent-%COMP%] span[_ngcontent-%COMP%] {\n font-size: 14px;\n color: var(--mj-text-primary);\n font-weight: 500;\n}\n\n.action-link[_ngcontent-%COMP%] {\n padding: 12px 20px;\n border-bottom: 1px solid var(--mj-border-default);\n flex-shrink: 0;\n}\n\n.action-link[_ngcontent-%COMP%] .btn-link[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n color: var(--mj-brand-primary);\n text-decoration: none;\n font-size: 14px;\n padding: 8px 12px;\n background: color-mix(in srgb, var(--mj-brand-primary) 8%, var(--mj-bg-surface));\n border: 1px solid color-mix(in srgb, var(--mj-brand-primary) 20%, transparent);\n border-radius: 4px;\n transition: all 0.2s;\n cursor: pointer;\n}\n\n.action-link[_ngcontent-%COMP%] .btn-link[_ngcontent-%COMP%]:hover {\n background: color-mix(in srgb, var(--mj-brand-primary) 15%, var(--mj-bg-surface));\n border-color: color-mix(in srgb, var(--mj-brand-primary) 35%, transparent);\n text-decoration: none;\n}\n\n\n.json-toolbar[_ngcontent-%COMP%] {\n display: flex;\n justify-content: flex-end;\n gap: 8px;\n margin-bottom: 8px;\n}\n\n\n\n.details-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));\n gap: 20px;\n padding: 20px;\n}\n\n.detail-item[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.detail-item.full-width[_ngcontent-%COMP%] {\n grid-column: 1 / -1;\n}\n\n.detail-item[_ngcontent-%COMP%] label[_ngcontent-%COMP%] {\n font-size: 12px;\n color: var(--mj-text-muted);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.detail-item[_ngcontent-%COMP%] span[_ngcontent-%COMP%] {\n font-size: 14px;\n color: var(--mj-text-secondary);\n}\n\n.error-message[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-error) 15%, var(--mj-bg-surface));\n color: var(--mj-status-error);\n padding: 12px;\n border-radius: 8px;\n font-size: 13px;\n}\n\n.result-viewer[_ngcontent-%COMP%], \n.state-viewer[_ngcontent-%COMP%] {\n padding: 20px;\n max-height: 450px;\n overflow: auto;\n display: flex;\n flex-direction: column;\n}\n\n.result-viewer[_ngcontent-%COMP%] mj-code-editor[_ngcontent-%COMP%], \n.state-viewer[_ngcontent-%COMP%] mj-code-editor[_ngcontent-%COMP%] {\n flex: 1;\n min-height: 0;\n}\n\n\n\n.empty-state[_ngcontent-%COMP%], \n.loading-state[_ngcontent-%COMP%], \n.error-state[_ngcontent-%COMP%] {\n text-align: center;\n padding: 60px 20px;\n color: var(--mj-text-muted);\n}\n\n.empty-state[_ngcontent-%COMP%] i[_ngcontent-%COMP%], \n.loading-state[_ngcontent-%COMP%] i[_ngcontent-%COMP%], \n.error-state[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n opacity: 0.3;\n margin-bottom: 16px;\n}\n\n\n\n@media (max-width: 768px) {\n .header-content[_ngcontent-%COMP%] {\n flex-direction: column;\n gap: 16px;\n }\n \n .header-stats[_ngcontent-%COMP%] {\n flex-wrap: wrap;\n }\n \n .json-detail-pane[_ngcontent-%COMP%] {\n width: 100%;\n }\n \n .timeline[_ngcontent-%COMP%] {\n padding-left: 30px;\n }\n \n .timeline-marker[_ngcontent-%COMP%] {\n left: -25px;\n width: 32px;\n height: 32px;\n }\n \n .timeline-content[_ngcontent-%COMP%] {\n margin-left: 10px;\n }\n}\n\n\n\n.entity-link[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n text-decoration: none;\n transition: all 0.2s ease;\n border-bottom: 1px solid transparent;\n display: inline-block;\n}\n\n.entity-link[_ngcontent-%COMP%]:hover {\n color: var(--mj-brand-primary-hover);\n border-bottom-color: var(--mj-brand-primary-hover);\n}\n\n.entity-link[_ngcontent-%COMP%]:active {\n color: var(--mj-brand-primary-hover);\n}\n\n\n\n.detail-pane-tabs[_ngcontent-%COMP%] {\n display: flex;\n gap: 8px;\n margin: 8px 0 0 0;\n border-bottom: 1px solid var(--mj-border-default);\n padding: 0 16px;\n}\n\n.detail-tab[_ngcontent-%COMP%] {\n padding: 10px 16px;\n background: none;\n border: none;\n border-bottom: 3px solid transparent;\n color: var(--mj-text-muted);\n font-size: 14px;\n font-weight: 500;\n cursor: pointer;\n transition: all 0.2s ease;\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.detail-tab[_ngcontent-%COMP%]:hover {\n color: var(--mj-text-secondary);\n background: color-mix(in srgb, var(--mj-text-primary) 2%, var(--mj-bg-surface));\n}\n\n.detail-tab.active[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n border-bottom-color: var(--mj-brand-primary);\n}\n\n.detail-tab[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 14px;\n}\n\n\n\n.detail-pane-content[_ngcontent-%COMP%] {\n flex: 1;\n overflow-y: auto;\n min-height: 0;\n margin-bottom: 35px;\n}\n\n.detail-pane-content.with-tabs[_ngcontent-%COMP%] {\n \n\n margin-top: 0;\n}\n\n\n\n.step-payload-diff[_ngcontent-%COMP%] {\n height: 100%;\n overflow-y: auto;\n padding: 16px;\n}\n\n.step-payload-diff[_ngcontent-%COMP%] mj-deep-diff[_ngcontent-%COMP%] {\n display: block;\n height: 100%;\n}\n\n\n\n.detail-pane-content[_ngcontent-%COMP%]:not(.with-tabs) .json-viewer[_ngcontent-%COMP%] {\n margin-top: 16px;\n}"] }); }
|
|
1407
|
+
} }, dependencies: [i1.NgClass, i2.NgControlStatus, i2.NgModel, i3.MJAccordionPanelComponent, i3.MJAccordionTitleDirective, i4.CodeEditorComponent, i5.DeepDiffComponent, i6.SplitComponent, i6.SplitAreaComponent, i7.AIAgentRunTimelineComponent, i8.AIAgentRunAnalyticsComponent, i9.AIAgentRunVisualizationComponent, i10.AIAgentRunStepDetailComponent, i1.DecimalPipe, i1.DatePipe], styles: [".ai-agent-run-form[_ngcontent-%COMP%] {\n height: 100%;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n}\n\n.record-form-container.ai-agent-run-form[_ngcontent-%COMP%] > .record-form[_ngcontent-%COMP%], \n.ai-agent-run-form[_ngcontent-%COMP%] > .record-form[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n height: 100%;\n min-height: 0;\n}\n\n\n\n.header[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface);\n border-bottom: 1px solid var(--mj-border-default);\n padding: 20px;\n box-shadow: var(--mj-shadow-sm);\n flex-shrink: 0;\n}\n\n.header-content[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n margin-bottom: 16px;\n}\n\n.header-left[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 16px;\n}\n\n.icon-wrapper[_ngcontent-%COMP%] {\n width: 48px;\n height: 48px;\n background: var(--mj-brand-primary);\n border-radius: 12px;\n display: flex;\n align-items: center;\n justify-content: center;\n color: var(--mj-text-inverse);\n font-size: 20px;\n overflow: hidden;\n}\n\n.agent-logo[_ngcontent-%COMP%] {\n width: 100%;\n height: 100%;\n object-fit: cover;\n}\n\n.header-info[_ngcontent-%COMP%] h2[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 24px;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n.meta-info[_ngcontent-%COMP%] {\n display: flex;\n gap: 12px;\n margin-top: 4px;\n font-size: 14px;\n color: var(--mj-text-muted);\n}\n\n.parent-run[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.parent-link[_ngcontent-%COMP%] {\n color: var(--mj-status-error);\n text-decoration: none;\n cursor: pointer;\n transition: color 0.2s;\n}\n\n.parent-link[_ngcontent-%COMP%]:hover {\n color: var(--mj-status-error);\n text-decoration: underline;\n}\n\n.agent-name[_ngcontent-%COMP%] {\n font-weight: 500;\n color: var(--mj-text-secondary);\n}\n\n.run-id[_ngcontent-%COMP%] {\n font-family: monospace;\n font-size: 12px;\n opacity: 0.7;\n}\n\n\n\n.conversation-pill[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 4px 10px;\n background: color-mix(in srgb, var(--mj-brand-primary) 8%, var(--mj-bg-surface));\n border: 1px solid color-mix(in srgb, var(--mj-brand-primary) 20%, transparent);\n border-radius: 16px;\n font-size: 12px;\n font-weight: 500;\n color: var(--mj-brand-primary);\n cursor: pointer;\n transition: all 0.2s ease;\n white-space: nowrap;\n}\n\n.conversation-pill[_ngcontent-%COMP%]:hover {\n background: color-mix(in srgb, var(--mj-brand-primary) 15%, var(--mj-bg-surface));\n border-color: color-mix(in srgb, var(--mj-brand-primary) 40%, transparent);\n transform: translateY(-1px);\n box-shadow: 0 2px 8px color-mix(in srgb, var(--mj-brand-primary) 15%, transparent);\n}\n\n.conversation-pill[_ngcontent-%COMP%] i[_ngcontent-%COMP%]:first-child {\n font-size: 11px;\n opacity: 0.9;\n}\n\n.conversation-pill[_ngcontent-%COMP%] .pill-action[_ngcontent-%COMP%] {\n font-size: 9px;\n opacity: 0.6;\n transition: opacity 0.2s ease;\n}\n\n.conversation-pill[_ngcontent-%COMP%]:hover .pill-action[_ngcontent-%COMP%] {\n opacity: 1;\n}\n\n.header-right[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 16px;\n}\n\n.status-badge[_ngcontent-%COMP%] {\n padding: 6px 16px;\n border-radius: 20px;\n font-size: 13px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n display: inline-flex;\n align-items: center;\n gap: 6px;\n}\n\n.status-badge[data-status=\"Running\"][_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-info) 15%, var(--mj-bg-surface));\n color: var(--mj-status-info);\n}\n\n.status-badge[data-status=\"Completed\"][_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-success) 15%, var(--mj-bg-surface));\n color: var(--mj-status-success);\n}\n\n.status-badge[data-status=\"Failed\"][_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-error) 15%, var(--mj-bg-surface));\n color: var(--mj-status-error);\n}\n\n.status-badge[data-status=\"Cancelled\"][_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-warning) 15%, var(--mj-bg-surface));\n color: var(--mj-status-warning);\n}\n\n.status-badge[data-status=\"Paused\"][_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-secondary);\n}\n\n.status-badge.small[_ngcontent-%COMP%] {\n padding: 4px 12px;\n font-size: 11px;\n}\n\n.header-actions[_ngcontent-%COMP%] {\n display: flex;\n gap: 8px;\n}\n\n.btn-icon[_ngcontent-%COMP%] {\n width: 36px;\n height: 36px;\n border: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface);\n border-radius: 8px;\n display: flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n transition: all 0.2s ease;\n color: var(--mj-text-muted);\n}\n\n.btn-icon[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-sunken);\n border-color: var(--mj-border-strong);\n color: var(--mj-text-secondary);\n}\n\n.header-stats[_ngcontent-%COMP%] {\n display: flex;\n gap: 24px;\n padding-top: 12px;\n border-top: 1px solid var(--mj-border-default);\n}\n\n\n\n.configuration-bar[_ngcontent-%COMP%] {\n display: flex;\n gap: 24px;\n padding-top: 16px;\n border-top: 1px solid var(--mj-border-default);\n margin-top: 16px;\n}\n\n.config-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n.config-item[_ngcontent-%COMP%] > i[_ngcontent-%COMP%] {\n font-size: 1.2em;\n color: var(--mj-text-muted);\n width: 24px;\n text-align: center;\n}\n\n.config-content[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n}\n\n.config-label[_ngcontent-%COMP%] {\n font-size: 12px;\n color: var(--mj-text-muted);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.config-value[_ngcontent-%COMP%] {\n font-size: 14px;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n.config-value[_ngcontent-%COMP%] .entity-link[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n text-decoration: none;\n cursor: pointer;\n transition: color 0.2s;\n}\n\n.config-value[_ngcontent-%COMP%] .entity-link[_ngcontent-%COMP%]:hover {\n color: var(--mj-brand-primary-hover);\n text-decoration: underline;\n}\n\n.stat[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 4px;\n}\n\n.stat[_ngcontent-%COMP%] .label[_ngcontent-%COMP%] {\n font-size: 12px;\n color: var(--mj-text-muted);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.stat[_ngcontent-%COMP%] .value[_ngcontent-%COMP%] {\n font-size: 14px;\n font-weight: 500;\n color: var(--mj-text-secondary);\n}\n\n.stat[_ngcontent-%COMP%] .value.success[_ngcontent-%COMP%] {\n color: var(--mj-status-success);\n}\n\n.stat[_ngcontent-%COMP%] .value.error[_ngcontent-%COMP%] {\n color: var(--mj-status-error);\n}\n\n\n\n.tabs[_ngcontent-%COMP%] {\n display: flex;\n border-bottom: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface-sunken);\n flex-shrink: 0;\n}\n\n.tab[_ngcontent-%COMP%] {\n padding: 12px 24px;\n border: none;\n background: transparent;\n cursor: pointer;\n font-size: 14px;\n font-weight: 500;\n color: var(--mj-text-muted);\n display: flex;\n align-items: center;\n gap: 8px;\n transition: all 0.2s ease;\n border-bottom: 3px solid transparent;\n}\n\n.tab[_ngcontent-%COMP%]:hover {\n color: var(--mj-text-secondary);\n background: color-mix(in srgb, var(--mj-text-primary) 2%, var(--mj-bg-surface));\n}\n\n.tab.active[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n border-bottom-color: var(--mj-brand-primary);\n background: var(--mj-bg-surface);\n}\n\n\n\n.content-area[_ngcontent-%COMP%] {\n position: relative;\n flex: 1;\n min-height: 0;\n overflow: auto;\n background: var(--mj-bg-surface);\n}\n\n.tab-content[_ngcontent-%COMP%] {\n height: 100%;\n min-height: 0;\n overflow: auto;\n}\n\n\n\n.tab-content[_ngcontent-%COMP%] mj-accordion-panel[_ngcontent-%COMP%] {\n display: block;\n margin-bottom: 8px;\n}\n\n\n\n.json-detail-pane[_ngcontent-%COMP%] {\n height: 100%;\n display: flex;\n flex-direction: column;\n background: var(--mj-bg-surface-sunken);\n border-left: 1px solid var(--mj-border-default);\n}\n\n.json-pane-header[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 16px 20px;\n background: var(--mj-bg-surface);\n border-bottom: 1px solid var(--mj-border-default);\n box-shadow: var(--mj-shadow-sm);\n}\n\n.json-pane-header[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 16px;\n font-weight: 600;\n color: var(--mj-text-primary);\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.json-pane-header[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-text-muted);\n font-size: 14px;\n}\n\n.json-pane-content[_ngcontent-%COMP%] {\n flex: 1;\n display: flex;\n flex-direction: column;\n overflow: auto;\n padding: 16px;\n}\n\n.json-meta[_ngcontent-%COMP%] {\n display: flex;\n gap: 20px;\n margin-bottom: 16px;\n flex-wrap: wrap;\n}\n\n.json-meta[_ngcontent-%COMP%] .meta-item[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 4px;\n}\n\n.json-meta[_ngcontent-%COMP%] .meta-item[_ngcontent-%COMP%] label[_ngcontent-%COMP%] {\n font-size: 11px;\n text-transform: uppercase;\n color: var(--mj-text-muted);\n font-weight: 600;\n letter-spacing: 0.5px;\n}\n\n.json-meta[_ngcontent-%COMP%] .meta-item[_ngcontent-%COMP%] span[_ngcontent-%COMP%] {\n font-size: 14px;\n color: var(--mj-text-primary);\n font-weight: 500;\n}\n\n.action-link[_ngcontent-%COMP%] {\n margin-bottom: 12px;\n}\n\n.action-link[_ngcontent-%COMP%] .btn-link[_ngcontent-%COMP%] {\n background: none;\n border: none;\n color: var(--mj-brand-primary);\n font-size: 14px;\n cursor: pointer;\n padding: 6px 12px;\n border-radius: 4px;\n transition: all 0.2s;\n display: inline-flex;\n align-items: center;\n gap: 6px;\n}\n\n.action-link[_ngcontent-%COMP%] .btn-link[_ngcontent-%COMP%]:hover {\n background: color-mix(in srgb, var(--mj-brand-primary) 8%, var(--mj-bg-surface));\n color: var(--mj-brand-primary-hover);\n}\n\n.json-viewer[_ngcontent-%COMP%] {\n flex: 1;\n display: flex;\n flex-direction: column;\n background: var(--mj-bg-surface);\n border-radius: 8px;\n border: 1px solid var(--mj-border-default);\n overflow: auto;\n padding: 20px;\n gap: 10px;\n min-height: 0;\n margin-bottom: 45px;\n}\n\n\n.json-toolbar[_ngcontent-%COMP%] {\n display: flex;\n justify-content: flex-end;\n padding: 8px 12px;\n background: var(--mj-bg-surface-sunken);\n border-bottom: 1px solid var(--mj-border-default);\n}\n\n\n\n.timeline-container[_ngcontent-%COMP%] {\n height: 100%;\n overflow-y: auto;\n padding: 20px;\n}\n\n.timeline-container[_ngcontent-%COMP%] > .timeline[_ngcontent-%COMP%] {\n max-width: 900px;\n margin: 0 auto;\n}\n\n.timeline[_ngcontent-%COMP%] {\n position: relative;\n padding-left: 40px;\n}\n\n.timeline[_ngcontent-%COMP%]::before {\n content: '';\n position: absolute;\n left: 20px;\n top: 0;\n bottom: 0;\n width: 2px;\n background: var(--mj-border-default);\n}\n\n.timeline-item[_ngcontent-%COMP%] {\n position: relative;\n margin-bottom: 24px;\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.timeline-item[_ngcontent-%COMP%]:hover {\n transform: translateX(4px);\n}\n\n.timeline-item.selected[_ngcontent-%COMP%] {\n transform: translateX(8px);\n}\n\n.timeline-item.selected[_ngcontent-%COMP%] .timeline-content[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 8%, var(--mj-bg-surface));\n border-color: var(--mj-brand-primary);\n}\n\n.timeline-marker[_ngcontent-%COMP%] {\n position: absolute;\n left: -30px;\n top: 0;\n width: 40px;\n height: 40px;\n border-radius: 50%;\n display: flex;\n align-items: center;\n justify-content: center;\n background: var(--mj-bg-surface);\n border: 3px solid var(--mj-border-default);\n z-index: 1;\n transition: all 0.2s ease;\n}\n\n.timeline-marker[data-color=\"success\"][_ngcontent-%COMP%] {\n border-color: var(--mj-status-success);\n color: var(--mj-status-success);\n}\n\n.timeline-marker[data-color=\"error\"][_ngcontent-%COMP%] {\n border-color: var(--mj-status-error);\n color: var(--mj-status-error);\n}\n\n.timeline-marker[data-color=\"info\"][_ngcontent-%COMP%] {\n border-color: var(--mj-status-info);\n color: var(--mj-status-info);\n}\n\n.timeline-marker[data-color=\"warning\"][_ngcontent-%COMP%] {\n border-color: var(--mj-status-warning);\n color: var(--mj-status-warning);\n}\n\n.timeline-marker[data-color=\"secondary\"][_ngcontent-%COMP%] {\n border-color: var(--mj-text-muted);\n color: var(--mj-text-muted);\n}\n\n.timeline-marker.small[_ngcontent-%COMP%] {\n width: 28px;\n height: 28px;\n font-size: 12px;\n}\n\n.timeline-content[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-radius: 12px;\n padding: 16px 20px;\n margin-left: 20px;\n box-shadow: var(--mj-shadow-sm);\n transition: all 0.2s ease;\n}\n\n.timeline-header[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 8px;\n}\n\n.timeline-header[_ngcontent-%COMP%] h4[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 16px;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n.timeline-header[_ngcontent-%COMP%] h5[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 14px;\n font-weight: 600;\n color: var(--mj-text-secondary);\n}\n\n.timeline-time[_ngcontent-%COMP%] {\n font-size: 12px;\n color: var(--mj-text-muted);\n font-family: monospace;\n}\n\n.timeline-subtitle[_ngcontent-%COMP%] {\n font-size: 13px;\n color: var(--mj-text-muted);\n margin-bottom: 8px;\n}\n\n.timeline-meta[_ngcontent-%COMP%] {\n display: flex;\n gap: 16px;\n font-size: 12px;\n color: var(--mj-text-muted);\n}\n\n.timeline-meta[_ngcontent-%COMP%] .status[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 2px 8px;\n border-radius: 12px;\n font-size: 11px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.timeline-meta[_ngcontent-%COMP%] .status[data-status=\"Completed\"][_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-success) 15%, var(--mj-bg-surface));\n color: var(--mj-status-success);\n}\n\n.timeline-meta[_ngcontent-%COMP%] .status[data-status=\"Failed\"][_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-error) 15%, var(--mj-bg-surface));\n color: var(--mj-status-error);\n}\n\n.timeline-meta[_ngcontent-%COMP%] .status[data-status=\"Running\"][_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-info) 15%, var(--mj-bg-surface));\n color: var(--mj-status-info);\n}\n\n.timeline-meta[_ngcontent-%COMP%] .status[data-status=\"Paused\"][_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-secondary);\n}\n\n.duration[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 4px;\n}\n\n.timeline-actions[_ngcontent-%COMP%] {\n position: absolute;\n right: 20px;\n top: 50%;\n transform: translateY(-50%);\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.btn-link[_ngcontent-%COMP%] {\n background: none;\n border: none;\n color: var(--mj-brand-primary);\n cursor: pointer;\n font-size: 12px;\n display: flex;\n align-items: center;\n gap: 4px;\n padding: 4px 8px;\n border-radius: 4px;\n transition: all 0.2s ease;\n}\n\n.btn-link[_ngcontent-%COMP%]:hover {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n}\n\n.btn-expand[_ngcontent-%COMP%] {\n width: 24px;\n height: 24px;\n border: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface);\n border-radius: 4px;\n display: flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n transition: all 0.2s ease;\n color: var(--mj-text-muted);\n font-size: 12px;\n}\n\n.btn-expand[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-sunken);\n border-color: var(--mj-border-strong);\n color: var(--mj-text-secondary);\n}\n\n\n\n.timeline-children[_ngcontent-%COMP%] {\n position: relative;\n margin-top: 12px;\n margin-bottom: 12px;\n}\n\n.timeline-children[_ngcontent-%COMP%]::before {\n content: '';\n position: absolute;\n left: -10px;\n top: -12px;\n bottom: 0;\n width: 2px;\n background: var(--mj-border-default);\n}\n\n.child-item[_ngcontent-%COMP%] {\n margin-bottom: 12px;\n}\n\n.child-item[_ngcontent-%COMP%] .timeline-content[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-sunken);\n border-color: var(--mj-border-default);\n}\n\n\n\n.sub-run-timeline[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 2%, var(--mj-bg-surface));\n border-left: 2px solid color-mix(in srgb, var(--mj-brand-primary) 20%, transparent);\n margin-left: 20px;\n padding-left: 20px;\n margin-top: 8px;\n margin-bottom: 8px;\n}\n\n.sub-run-item[_ngcontent-%COMP%] .timeline-marker[_ngcontent-%COMP%] {\n border-width: 2px;\n}\n\n.sub-run-item[_ngcontent-%COMP%] .timeline-content[_ngcontent-%COMP%] {\n transition: all 0.2s ease;\n}\n\n\n\n.json-detail-pane[_ngcontent-%COMP%] {\n height: 100%;\n display: flex;\n flex-direction: column;\n background: var(--mj-bg-surface);\n border-left: 1px solid var(--mj-border-default);\n}\n\n.json-pane-header[_ngcontent-%COMP%] {\n padding: 16px 20px;\n background: var(--mj-bg-surface-sunken);\n border-bottom: 1px solid var(--mj-border-default);\n display: flex;\n justify-content: space-between;\n align-items: center;\n flex-shrink: 0;\n}\n\n.json-pane-header[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 16px;\n color: var(--mj-text-primary);\n display: flex;\n align-items: center;\n gap: 10px;\n font-weight: 600;\n}\n\n.json-pane-content[_ngcontent-%COMP%] {\n flex: 1;\n overflow-y: auto;\n display: flex;\n flex-direction: column;\n}\n\n.json-meta[_ngcontent-%COMP%] {\n padding: 16px 20px;\n border-bottom: 1px solid var(--mj-border-default);\n display: flex;\n gap: 20px;\n flex-wrap: wrap;\n flex-shrink: 0;\n}\n\n.json-meta[_ngcontent-%COMP%] .meta-item[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 4px;\n}\n\n.json-meta[_ngcontent-%COMP%] label[_ngcontent-%COMP%] {\n font-size: 11px;\n color: var(--mj-text-muted);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.json-meta[_ngcontent-%COMP%] span[_ngcontent-%COMP%] {\n font-size: 14px;\n color: var(--mj-text-primary);\n font-weight: 500;\n}\n\n.action-link[_ngcontent-%COMP%] {\n padding: 12px 20px;\n border-bottom: 1px solid var(--mj-border-default);\n flex-shrink: 0;\n}\n\n.action-link[_ngcontent-%COMP%] .btn-link[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n color: var(--mj-brand-primary);\n text-decoration: none;\n font-size: 14px;\n padding: 8px 12px;\n background: color-mix(in srgb, var(--mj-brand-primary) 8%, var(--mj-bg-surface));\n border: 1px solid color-mix(in srgb, var(--mj-brand-primary) 20%, transparent);\n border-radius: 4px;\n transition: all 0.2s;\n cursor: pointer;\n}\n\n.action-link[_ngcontent-%COMP%] .btn-link[_ngcontent-%COMP%]:hover {\n background: color-mix(in srgb, var(--mj-brand-primary) 15%, var(--mj-bg-surface));\n border-color: color-mix(in srgb, var(--mj-brand-primary) 35%, transparent);\n text-decoration: none;\n}\n\n\n.json-toolbar[_ngcontent-%COMP%] {\n display: flex;\n justify-content: flex-end;\n gap: 8px;\n margin-bottom: 8px;\n}\n\n\n\n.details-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));\n gap: 20px;\n padding: 20px;\n}\n\n.detail-item[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.detail-item.full-width[_ngcontent-%COMP%] {\n grid-column: 1 / -1;\n}\n\n.detail-item[_ngcontent-%COMP%] label[_ngcontent-%COMP%] {\n font-size: 12px;\n color: var(--mj-text-muted);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.detail-item[_ngcontent-%COMP%] span[_ngcontent-%COMP%] {\n font-size: 14px;\n color: var(--mj-text-secondary);\n}\n\n.error-message[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-error) 15%, var(--mj-bg-surface));\n color: var(--mj-status-error);\n padding: 12px;\n border-radius: 8px;\n font-size: 13px;\n}\n\n.result-viewer[_ngcontent-%COMP%], \n.state-viewer[_ngcontent-%COMP%] {\n padding: 20px;\n max-height: 450px;\n overflow: auto;\n display: flex;\n flex-direction: column;\n}\n\n.result-viewer[_ngcontent-%COMP%] mj-code-editor[_ngcontent-%COMP%], \n.state-viewer[_ngcontent-%COMP%] mj-code-editor[_ngcontent-%COMP%] {\n flex: 1;\n min-height: 0;\n}\n\n\n\n.empty-state[_ngcontent-%COMP%], \n.loading-state[_ngcontent-%COMP%], \n.error-state[_ngcontent-%COMP%] {\n text-align: center;\n padding: 60px 20px;\n color: var(--mj-text-muted);\n}\n\n.empty-state[_ngcontent-%COMP%] i[_ngcontent-%COMP%], \n.loading-state[_ngcontent-%COMP%] i[_ngcontent-%COMP%], \n.error-state[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n opacity: 0.3;\n margin-bottom: 16px;\n}\n\n\n\n@media (max-width: 768px) {\n .header-content[_ngcontent-%COMP%] {\n flex-direction: column;\n gap: 16px;\n }\n \n .header-stats[_ngcontent-%COMP%] {\n flex-wrap: wrap;\n }\n \n .json-detail-pane[_ngcontent-%COMP%] {\n width: 100%;\n }\n \n .timeline[_ngcontent-%COMP%] {\n padding-left: 30px;\n }\n \n .timeline-marker[_ngcontent-%COMP%] {\n left: -25px;\n width: 32px;\n height: 32px;\n }\n \n .timeline-content[_ngcontent-%COMP%] {\n margin-left: 10px;\n }\n}\n\n\n\n.entity-link[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n text-decoration: none;\n transition: all 0.2s ease;\n border-bottom: 1px solid transparent;\n display: inline-block;\n}\n\n.entity-link[_ngcontent-%COMP%]:hover {\n color: var(--mj-brand-primary-hover);\n border-bottom-color: var(--mj-brand-primary-hover);\n}\n\n.entity-link[_ngcontent-%COMP%]:active {\n color: var(--mj-brand-primary-hover);\n}\n\n\n\n.detail-pane-tabs[_ngcontent-%COMP%] {\n display: flex;\n gap: 8px;\n margin: 8px 0 0 0;\n border-bottom: 1px solid var(--mj-border-default);\n padding: 0 16px;\n}\n\n.detail-tab[_ngcontent-%COMP%] {\n padding: 10px 16px;\n background: none;\n border: none;\n border-bottom: 3px solid transparent;\n color: var(--mj-text-muted);\n font-size: 14px;\n font-weight: 500;\n cursor: pointer;\n transition: all 0.2s ease;\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.detail-tab[_ngcontent-%COMP%]:hover {\n color: var(--mj-text-secondary);\n background: color-mix(in srgb, var(--mj-text-primary) 2%, var(--mj-bg-surface));\n}\n\n.detail-tab.active[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n border-bottom-color: var(--mj-brand-primary);\n}\n\n.detail-tab[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 14px;\n}\n\n\n\n.detail-pane-content[_ngcontent-%COMP%] {\n flex: 1;\n overflow-y: auto;\n min-height: 0;\n margin-bottom: 35px;\n}\n\n.detail-pane-content.with-tabs[_ngcontent-%COMP%] {\n \n\n margin-top: 0;\n}\n\n\n\n.step-payload-diff[_ngcontent-%COMP%] {\n height: 100%;\n overflow-y: auto;\n padding: 16px;\n}\n\n.step-payload-diff[_ngcontent-%COMP%] mj-deep-diff[_ngcontent-%COMP%] {\n display: block;\n height: 100%;\n}\n\n\n\n.detail-pane-content[_ngcontent-%COMP%]:not(.with-tabs) .json-viewer[_ngcontent-%COMP%] {\n margin-top: 16px;\n}"] }); }
|
|
1388
1408
|
};
|
|
1389
1409
|
MJAIAgentRunFormComponentExtended = __decorate([
|
|
1390
1410
|
RegisterClass(BaseFormComponent, 'MJ: AI Agent Runs')
|
|
@@ -1392,7 +1412,7 @@ MJAIAgentRunFormComponentExtended = __decorate([
|
|
|
1392
1412
|
export { MJAIAgentRunFormComponentExtended };
|
|
1393
1413
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(MJAIAgentRunFormComponentExtended, [{
|
|
1394
1414
|
type: Component,
|
|
1395
|
-
args: [{ standalone: false, selector: 'mj-ai-agent-run-form', template: "<div class=\"record-form-container ai-agent-run-form\">\n <div class=\"record-form\">\n <!-- Header -->\n <div class=\"header\">\n <div class=\"header-content\">\n <div class=\"header-left\">\n <div class=\"icon-wrapper\">\n @if (agent && agent.LogoURL) {\n <img [src]=\"agent.LogoURL\" [alt]=\"agent.Name || 'Agent'\" class=\"agent-logo\" />\n }\n @if (agent && !agent.LogoURL && agent.IconClass) {\n <i class=\"fas\" [ngClass]=\"agent.IconClass\"></i>\n }\n @if (!agent || (!agent.LogoURL && !agent.IconClass)) {\n <i class=\"fas fa-robot\"></i>\n }\n </div>\n <div class=\"header-info\">\n <h2>AI Agent Run</h2>\n <div class=\"meta-info\">\n @if (agent) {\n <span class=\"agent-name\">\n <a href=\"javascript:void(0)\" class=\"entity-link\" (click)=\"openEntityRecord('MJ: AI Agents', record.AgentID)\">\n {{ agent.Name }}\n </a>\n </span>\n }\n <span class=\"run-id\">{{ record.ID }}</span>\n @if (record.ParentRunID) {\n <span class=\"parent-run\">\n <i class=\"fas fa-level-up-alt\"></i>\n <a (click)=\"navigateToParentRun()\" class=\"parent-link\">Parent Run</a>\n </span>\n }\n <!-- Conversation Link Pill -->\n @if (record.ConversationID) {\n <span class=\"conversation-pill\" (click)=\"navigateToConversation()\" title=\"Open conversation in Chat app\">\n <i class=\"fas fa-comments\"></i>\n <span>Conversation</span>\n <i class=\"fas fa-external-link-alt pill-action\"></i>\n </span>\n }\n </div>\n </div>\n </div>\n <div class=\"header-right\">\n <div class=\"status-badge\" [attr.data-status]=\"record.Status\">\n <i class=\"fas\" [ngClass]=\"getStatusIcon(record.Status || '')\"></i>\n {{ record.Status }}\n </div>\n <div class=\"header-actions\">\n <button class=\"btn-icon\" (click)=\"refreshData()\" title=\"Refresh\">\n <i class=\"fas fa-sync-alt\"></i>\n </button>\n </div>\n </div>\n </div>\n <div class=\"header-stats\">\n <div class=\"stat\">\n <span class=\"label\">Started</span>\n <span class=\"value\">{{ record.StartedAt | date:'medium' }}</span>\n </div>\n @if (record.CompletedAt) {\n <div class=\"stat\">\n <span class=\"label\">Completed</span>\n <span class=\"value\">{{ record.CompletedAt | date:'medium' }}</span>\n </div>\n }\n @if (record.CompletedAt) {\n <div class=\"stat\">\n <span class=\"label\">Duration</span>\n <span class=\"value\">{{ calculateDuration(record.StartedAt, record.CompletedAt) }}</span>\n </div>\n }\n @if (record.Success !== null && record.CompletedAt !== null) {\n <div class=\"stat\">\n <span class=\"label\">Result</span>\n <span class=\"value\" [class.success]=\"record.Success\" [class.error]=\"!record.Success\">\n {{ record.Success ? 'Success' : 'Failed' }}\n </span>\n </div>\n }\n @if (costMetrics && (costMetrics.totalTokensInput + costMetrics.totalTokensOutput) > 0) {\n <div class=\"stat\">\n <span class=\"label\">Tokens</span>\n @if (!costMetrics.isLoading) {\n <span class=\"value\">{{ (costMetrics.totalTokensInput + costMetrics.totalTokensOutput) | number:'1.0-0' }}</span>\n }\n @if (costMetrics.isLoading) {\n <span class=\"value loading\"><i class=\"fas fa-spinner fa-spin\"></i></span>\n }\n </div>\n }\n @if (costMetrics && costMetrics.totalCost > 0) {\n <div class=\"stat\">\n <span class=\"label\">Cost</span>\n @if (!costMetrics.isLoading) {\n <span class=\"value\">${{ costMetrics.totalCost | number:'1.2-4' }}</span>\n }\n @if (costMetrics.isLoading) {\n <span class=\"value loading\"><i class=\"fas fa-spinner fa-spin\"></i></span>\n }\n </div>\n }\n @if (record.EffortLevel) {\n <div class=\"stat\">\n <span class=\"label\">Effort Level</span>\n <span class=\"value\">{{ record.EffortLevel }}</span>\n </div>\n }\n </div>\n\n <!-- Configuration Bar (shown below header stats when ConfigurationID exists) -->\n @if (record.ConfigurationID) {\n <div class=\"configuration-bar\">\n <div class=\"config-item\">\n <i class=\"fas fa-cog\"></i>\n <div class=\"config-content\">\n <div class=\"config-label\">Configuration</div>\n <div class=\"config-value\">\n <a href=\"javascript:void(0)\" class=\"entity-link\" (click)=\"openEntityRecord('MJ: AI Configurations', record.ConfigurationID)\">\n {{ record.Configuration || 'Unknown' }}\n </a>\n </div>\n </div>\n </div>\n </div>\n }\n </div>\n\n <!-- Tabs -->\n <div class=\"tabs\">\n <button class=\"tab\" [class.active]=\"activeTab === 'timeline'\" (click)=\"changeTab('timeline')\">\n <i class=\"fas fa-stream\"></i> Timeline\n </button>\n <button class=\"tab\" [class.active]=\"activeTab === 'visualization'\" (click)=\"changeTab('visualization')\">\n <i class=\"fas fa-diagram-project\"></i> Visualization\n </button>\n <button class=\"tab\" [class.active]=\"activeTab === 'analytics'\" (click)=\"changeTab('analytics')\">\n <i class=\"fas fa-chart-line\"></i> Analytics\n </button>\n <button class=\"tab\" [class.active]=\"activeTab === 'details'\" (click)=\"changeTab('details')\">\n <i class=\"fas fa-info-circle\"></i> Details\n </button>\n </div>\n\n <!-- Content -->\n <div class=\"content-area\">\n <!-- Timeline Tab -->\n @if (activeTab === 'timeline') {\n <div class=\"tab-content\" style=\"height: 100%;\">\n <kendo-splitter style=\"height: 100%;\" orientation=\"horizontal\">\n <!-- Timeline Pane -->\n <kendo-splitter-pane [min]=\"'400px'\">\n <mj-ai-agent-run-timeline\n [aiAgentRunId]=\"record.ID\"\n [dataHelper]=\"dataHelper\"\n [autoRefresh]=\"record.Status === 'Running'\"\n [refreshInterval]=\"30000\"\n (itemSelected)=\"selectTimelineItem($event)\"\n (navigateToEntity)=\"navigateToEntityRecord($event)\"\n (agentRunCompleted)=\"onAgentRunCompleted($event)\">\n </mj-ai-agent-run-timeline>\n </kendo-splitter-pane>\n <!-- JSON Detail Pane -->\n <kendo-splitter-pane [size]=\"'45%'\" [min]=\"'300px'\" [collapsed]=\"!selectedTimelineItem\">\n <mj-ai-agent-run-step-detail\n [selectedTimelineItem]=\"selectedTimelineItem\"\n (closePanel)=\"closeJsonPanel()\"\n (navigateToActionLog)=\"navigateToActionLog($event)\"\n (copyToClipboard)=\"copyToClipboard($event)\">\n </mj-ai-agent-run-step-detail>\n </kendo-splitter-pane>\n </kendo-splitter>\n </div>\n }\n\n <!-- Visualization Tab -->\n @if (activeTab === 'visualization') {\n <div class=\"tab-content\" style=\"height: 100%;\">\n @if (visualizationLoaded) {\n <mj-ai-agent-run-visualization\n #visualizationComponent\n [aiAgentRunId]=\"record.ID\"\n [dataHelper]=\"dataHelper\"\n >\n </mj-ai-agent-run-visualization>\n }\n </div>\n }\n\n <!-- Analytics Tab -->\n @if (activeTab === 'analytics') {\n <div class=\"tab-content\" style=\"height: 100%;\">\n @if (analyticsLoaded) {\n <mj-ai-agent-run-analytics\n #analyticsComponent\n [agentRunId]=\"record.ID\"\n >\n </mj-ai-agent-run-analytics>\n }\n </div>\n }\n\n <!-- Details Tab -->\n @if (activeTab === 'details') {\n <div class=\"tab-content\">\n <kendo-panelbar [keepItemContent]=\"true\">\n <kendo-panelbar-item title=\"General Information\" [expanded]=\"true\">\n <ng-template kendoPanelBarContent>\n <div class=\"details-grid\">\n <div class=\"detail-item\">\n <label>Agent</label>\n <span>\n <a href=\"javascript:void(0)\" class=\"entity-link\" (click)=\"openEntityRecord('MJ: AI Agents', record.AgentID)\">\n {{ agent?.Name || 'N/A' }}\n </a>\n </span>\n </div>\n <div class=\"detail-item\">\n <label>Parent Run ID</label>\n <span>\n @if (record.ParentRunID) {\n <a href=\"javascript:void(0)\" class=\"entity-link\" (click)=\"openEntityRecord('MJ: AI Agent Runs', record.ParentRunID)\">\n {{ record.ParentRunID }}\n </a>\n }\n @if (!record.ParentRunID) {\n <span>None (Root)</span>\n }\n </span>\n </div>\n <div class=\"detail-item\">\n <label>Last Run ID</label>\n <span>\n @if (record.LastRunID) {\n <a href=\"javascript:void(0)\" class=\"entity-link\" (click)=\"openEntityRecord('MJ: AI Agent Runs', record.LastRunID)\">\n {{ record.LastRunID }}\n </a>\n }\n @if (!record.LastRunID) {\n <span>None</span>\n }\n </span>\n </div>\n <div class=\"detail-item\">\n <label>Conversation ID</label>\n <span>\n @if (record.ConversationID) {\n <a href=\"javascript:void(0)\" class=\"entity-link\" (click)=\"openEntityRecord('MJ: Conversations', record.ConversationID)\">\n {{ record.ConversationID }}\n </a>\n }\n @if (!record.ConversationID) {\n <span>N/A</span>\n }\n </span>\n </div>\n <div class=\"detail-item\">\n <label>User</label>\n <span>\n @if (record.UserID) {\n <a href=\"javascript:void(0)\" class=\"entity-link\" (click)=\"openEntityRecord('MJ: Users', record.UserID)\">\n {{ record.User || 'N/A' }}\n </a>\n }\n @if (!record.UserID) {\n <span>N/A</span>\n }\n </span>\n </div>\n </div>\n </ng-template>\n </kendo-panelbar-item>\n <kendo-panelbar-item title=\"Execution Settings\">\n <ng-template kendoPanelBarContent>\n <div class=\"details-grid\">\n <div class=\"detail-item\">\n <label>Override Model</label>\n <span>\n @if (record.OverrideModelID) {\n <a href=\"javascript:void(0)\" class=\"entity-link\" (click)=\"openEntityRecord('MJ: AI Models', record.OverrideModelID)\">\n {{ record.OverrideModel || 'N/A' }}\n </a>\n }\n @if (!record.OverrideModelID) {\n <span>N/A</span>\n }\n </span>\n </div>\n <div class=\"detail-item\">\n <label>Override Vendor</label>\n <span>\n @if (record.OverrideVendorID) {\n <a href=\"javascript:void(0)\" class=\"entity-link\" (click)=\"openEntityRecord('MJ: AI Vendors', record.OverrideVendorID)\">\n {{ record.OverrideVendor || 'N/A' }}\n </a>\n }\n @if (!record.OverrideVendorID) {\n <span>N/A</span>\n }\n </span>\n </div>\n <div class=\"detail-item\">\n <label>Verbose Logging</label>\n <span>{{ record.Verbose ? 'Yes' : 'No' }}</span>\n </div>\n </div>\n </ng-template>\n </kendo-panelbar-item>\n <kendo-panelbar-item title=\"Execution Status\">\n <ng-template kendoPanelBarContent>\n <div class=\"details-grid\">\n <div class=\"detail-item\">\n <label>Status</label>\n <span class=\"status-badge\" [attr.data-status]=\"record.Status\">\n {{ record.Status }}\n </span>\n </div>\n <div class=\"detail-item\">\n <label>Success</label>\n @if (record.Success === null) {\n <span>In Progress</span>\n }\n @else if (record.Success) {\n <span class=\"success\">Yes</span>\n }\n @else {\n <span class=\"error-message\">No</span>\n }\n </div>\n @if (record.Message) {\n <div class=\"detail-item full-width\">\n <label>Message</label>\n <div class=\"message\">{{ record.Message }}</div>\n </div>\n }\n @if (record.ErrorMessage) {\n <div class=\"detail-item full-width\">\n <label>Error Message</label>\n <div class=\"error-message\">{{ record.ErrorMessage }}</div>\n </div>\n }\n </div>\n </ng-template>\n </kendo-panelbar-item>\n <kendo-panelbar-item title=\"Usage & Cost\">\n <ng-template kendoPanelBarContent>\n <div class=\"details-grid\">\n <div class=\"detail-item\">\n <label>Total Tokens Used</label>\n <span>{{ record.TotalTokensUsed ? (record.TotalTokensUsed | number:'1.0-0') : 'N/A' }}</span>\n </div>\n <div class=\"detail-item\">\n <label>Prompt Tokens</label>\n <span>{{ record.TotalPromptTokensUsed ? (record.TotalPromptTokensUsed | number:'1.0-0') : 'N/A' }}</span>\n </div>\n <div class=\"detail-item\">\n <label>Completion Tokens</label>\n <span>{{ record.TotalCompletionTokensUsed ? (record.TotalCompletionTokensUsed | number:'1.0-0') : 'N/A' }}</span>\n </div>\n <div class=\"detail-item\">\n <label>Total Cost</label>\n <span>{{ record.TotalCost != null ? ('$' + (record.TotalCost | number:'1.2-4')) : 'N/A' }}</span>\n </div>\n <div class=\"detail-item\">\n <label>Total Prompt Iterations</label>\n <span>{{ record.TotalPromptIterations != null ? (record.TotalPromptIterations | number:'1.0-0') : 'N/A' }}</span>\n </div>\n </div>\n </ng-template>\n </kendo-panelbar-item>\n @if (record.Result) {\n <kendo-panelbar-item title=\"Result\">\n <ng-template kendoPanelBarContent>\n <div class=\"result-viewer\">\n @if (isParsingComplete) {\n <mj-code-editor\n [ngModel]=\"parsedResult\"\n [language]=\"'json'\"\n [readonly]=\"true\"\n style=\"height: 300px; width: 100%;\">\n </mj-code-editor>\n } @else {\n <div style=\"padding: 20px; text-align: center; color: #666;\">\n <i class=\"fas fa-spinner fa-spin\"></i> Loading result data...\n </div>\n }\n </div>\n </ng-template>\n </kendo-panelbar-item>\n }\n @if (record.StartingPayload) {\n <kendo-panelbar-item title=\"Starting Payload\">\n <ng-template kendoPanelBarContent>\n <div class=\"result-viewer\">\n @if (isParsingComplete) {\n <mj-code-editor\n [ngModel]=\"parsedStartingPayload\"\n [language]=\"'json'\"\n [readonly]=\"true\"\n style=\"height: 300px; width: 100%;\">\n </mj-code-editor>\n } @else {\n <div style=\"padding: 20px; text-align: center; color: #666;\">\n <i class=\"fas fa-spinner fa-spin\"></i> Loading payload data...\n </div>\n }\n </div>\n </ng-template>\n </kendo-panelbar-item>\n }\n @if (record.Data) {\n <kendo-panelbar-item title=\"Execution Data\">\n <ng-template kendoPanelBarContent>\n <div class=\"result-viewer\">\n @if (isParsingComplete) {\n <mj-code-editor\n [ngModel]=\"parsedData\"\n [language]=\"'json'\"\n [readonly]=\"true\"\n style=\"height: 300px; width: 100%;\">\n </mj-code-editor>\n } @else {\n <div style=\"padding: 20px; text-align: center; color: #666;\">\n <i class=\"fas fa-spinner fa-spin\"></i> Loading execution data...\n </div>\n }\n </div>\n </ng-template>\n </kendo-panelbar-item>\n }\n @if (record.FinalPayload) {\n <kendo-panelbar-item title=\"Final Payload\">\n <ng-template kendoPanelBarContent>\n <div class=\"result-viewer\">\n @if (isParsingComplete) {\n <mj-code-editor\n [ngModel]=\"parsedFinalPayload\"\n [language]=\"'json'\"\n [readonly]=\"true\"\n style=\"height: 300px; width: 100%;\">\n </mj-code-editor>\n } @else {\n <div style=\"padding: 20px; text-align: center; color: #666;\">\n <i class=\"fas fa-spinner fa-spin\"></i> Loading final payload data...\n </div>\n }\n </div>\n </ng-template>\n </kendo-panelbar-item>\n }\n @if (showPayloadDiff) {\n <kendo-panelbar-item title=\"Payload Diff\">\n <ng-template kendoPanelBarContent>\n <div style=\"padding: 20px; background: #f8f9fa;\">\n @if (isParsingComplete) {\n <mj-deep-diff\n [oldValue]=\"startingPayloadObject\"\n [newValue]=\"finalPayloadObject\"\n [title]=\"''\"\n [showSummary]=\"true\"\n [showUnchanged]=\"false\"\n [expandAll]=\"false\"\n [maxDepth]=\"10\"\n [maxStringLength]=\"200\"\n [treatNullAsUndefined]=\"true\">\n </mj-deep-diff>\n } @else {\n <div style=\"padding: 20px; text-align: center; color: #666;\">\n <i class=\"fas fa-spinner fa-spin\"></i> Loading payload diff...\n </div>\n }\n </div>\n </ng-template>\n </kendo-panelbar-item>\n }\n </kendo-panelbar>\n </div>\n }\n</div>\n</div>\n</div>", styles: [".ai-agent-run-form {\n height: 100%;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n}\n\n.record-form-container.ai-agent-run-form > .record-form,\n.ai-agent-run-form > .record-form {\n display: flex;\n flex-direction: column;\n height: 100%;\n min-height: 0;\n}\n\n/* Header Styles */\n.header {\n background: var(--mj-bg-surface);\n border-bottom: 1px solid var(--mj-border-default);\n padding: 20px;\n box-shadow: var(--mj-shadow-sm);\n flex-shrink: 0;\n}\n\n.header-content {\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n margin-bottom: 16px;\n}\n\n.header-left {\n display: flex;\n align-items: center;\n gap: 16px;\n}\n\n.icon-wrapper {\n width: 48px;\n height: 48px;\n background: var(--mj-brand-primary);\n border-radius: 12px;\n display: flex;\n align-items: center;\n justify-content: center;\n color: var(--mj-text-inverse);\n font-size: 20px;\n overflow: hidden;\n}\n\n.agent-logo {\n width: 100%;\n height: 100%;\n object-fit: cover;\n}\n\n.header-info h2 {\n margin: 0;\n font-size: 24px;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n.meta-info {\n display: flex;\n gap: 12px;\n margin-top: 4px;\n font-size: 14px;\n color: var(--mj-text-muted);\n}\n\n.parent-run {\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.parent-link {\n color: var(--mj-status-error);\n text-decoration: none;\n cursor: pointer;\n transition: color 0.2s;\n}\n\n.parent-link:hover {\n color: var(--mj-status-error);\n text-decoration: underline;\n}\n\n.agent-name {\n font-weight: 500;\n color: var(--mj-text-secondary);\n}\n\n.run-id {\n font-family: monospace;\n font-size: 12px;\n opacity: 0.7;\n}\n\n/* Conversation Link Pill */\n.conversation-pill {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 4px 10px;\n background: color-mix(in srgb, var(--mj-brand-primary) 8%, var(--mj-bg-surface));\n border: 1px solid color-mix(in srgb, var(--mj-brand-primary) 20%, transparent);\n border-radius: 16px;\n font-size: 12px;\n font-weight: 500;\n color: var(--mj-brand-primary);\n cursor: pointer;\n transition: all 0.2s ease;\n white-space: nowrap;\n}\n\n.conversation-pill:hover {\n background: color-mix(in srgb, var(--mj-brand-primary) 15%, var(--mj-bg-surface));\n border-color: color-mix(in srgb, var(--mj-brand-primary) 40%, transparent);\n transform: translateY(-1px);\n box-shadow: 0 2px 8px color-mix(in srgb, var(--mj-brand-primary) 15%, transparent);\n}\n\n.conversation-pill i:first-child {\n font-size: 11px;\n opacity: 0.9;\n}\n\n.conversation-pill .pill-action {\n font-size: 9px;\n opacity: 0.6;\n transition: opacity 0.2s ease;\n}\n\n.conversation-pill:hover .pill-action {\n opacity: 1;\n}\n\n.header-right {\n display: flex;\n align-items: center;\n gap: 16px;\n}\n\n.status-badge {\n padding: 6px 16px;\n border-radius: 20px;\n font-size: 13px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n display: inline-flex;\n align-items: center;\n gap: 6px;\n}\n\n.status-badge[data-status=\"Running\"] {\n background: color-mix(in srgb, var(--mj-status-info) 15%, var(--mj-bg-surface));\n color: var(--mj-status-info);\n}\n\n.status-badge[data-status=\"Completed\"] {\n background: color-mix(in srgb, var(--mj-status-success) 15%, var(--mj-bg-surface));\n color: var(--mj-status-success);\n}\n\n.status-badge[data-status=\"Failed\"] {\n background: color-mix(in srgb, var(--mj-status-error) 15%, var(--mj-bg-surface));\n color: var(--mj-status-error);\n}\n\n.status-badge[data-status=\"Cancelled\"] {\n background: color-mix(in srgb, var(--mj-status-warning) 15%, var(--mj-bg-surface));\n color: var(--mj-status-warning);\n}\n\n.status-badge[data-status=\"Paused\"] {\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-secondary);\n}\n\n.status-badge.small {\n padding: 4px 12px;\n font-size: 11px;\n}\n\n.header-actions {\n display: flex;\n gap: 8px;\n}\n\n.btn-icon {\n width: 36px;\n height: 36px;\n border: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface);\n border-radius: 8px;\n display: flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n transition: all 0.2s ease;\n color: var(--mj-text-muted);\n}\n\n.btn-icon:hover {\n background: var(--mj-bg-surface-sunken);\n border-color: var(--mj-border-strong);\n color: var(--mj-text-secondary);\n}\n\n.header-stats {\n display: flex;\n gap: 24px;\n padding-top: 12px;\n border-top: 1px solid var(--mj-border-default);\n}\n\n/* Configuration Bar */\n.configuration-bar {\n display: flex;\n gap: 24px;\n padding-top: 16px;\n border-top: 1px solid var(--mj-border-default);\n margin-top: 16px;\n}\n\n.config-item {\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n.config-item > i {\n font-size: 1.2em;\n color: var(--mj-text-muted);\n width: 24px;\n text-align: center;\n}\n\n.config-content {\n display: flex;\n flex-direction: column;\n}\n\n.config-label {\n font-size: 12px;\n color: var(--mj-text-muted);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.config-value {\n font-size: 14px;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n.config-value .entity-link {\n color: var(--mj-brand-primary);\n text-decoration: none;\n cursor: pointer;\n transition: color 0.2s;\n}\n\n.config-value .entity-link:hover {\n color: var(--mj-brand-primary-hover);\n text-decoration: underline;\n}\n\n.stat {\n display: flex;\n flex-direction: column;\n gap: 4px;\n}\n\n.stat .label {\n font-size: 12px;\n color: var(--mj-text-muted);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.stat .value {\n font-size: 14px;\n font-weight: 500;\n color: var(--mj-text-secondary);\n}\n\n.stat .value.success {\n color: var(--mj-status-success);\n}\n\n.stat .value.error {\n color: var(--mj-status-error);\n}\n\n/* Tabs */\n.tabs {\n display: flex;\n border-bottom: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface-sunken);\n flex-shrink: 0;\n}\n\n.tab {\n padding: 12px 24px;\n border: none;\n background: transparent;\n cursor: pointer;\n font-size: 14px;\n font-weight: 500;\n color: var(--mj-text-muted);\n display: flex;\n align-items: center;\n gap: 8px;\n transition: all 0.2s ease;\n border-bottom: 3px solid transparent;\n}\n\n.tab:hover {\n color: var(--mj-text-secondary);\n background: color-mix(in srgb, var(--mj-text-primary) 2%, var(--mj-bg-surface));\n}\n\n.tab.active {\n color: var(--mj-brand-primary);\n border-bottom-color: var(--mj-brand-primary);\n background: var(--mj-bg-surface);\n}\n\n/* Content Area */\n.content-area {\n position: relative;\n flex: 1;\n min-height: 0;\n overflow: auto;\n background: var(--mj-bg-surface);\n}\n\n.tab-content {\n height: 100%;\n min-height: 0;\n overflow: auto;\n}\n\n/* Details tab specific */\n.tab-content[ng-reflect-ng-if=\"true\"] > kendo-panelbar {\n height: 100%;\n overflow-y: auto;\n}\n\n/* JSON Detail Pane */\n.json-detail-pane {\n height: 100%;\n display: flex;\n flex-direction: column;\n background: var(--mj-bg-surface-sunken);\n border-left: 1px solid var(--mj-border-default);\n}\n\n.json-pane-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 16px 20px;\n background: var(--mj-bg-surface);\n border-bottom: 1px solid var(--mj-border-default);\n box-shadow: var(--mj-shadow-sm);\n}\n\n.json-pane-header h3 {\n margin: 0;\n font-size: 16px;\n font-weight: 600;\n color: var(--mj-text-primary);\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.json-pane-header h3 i {\n color: var(--mj-text-muted);\n font-size: 14px;\n}\n\n.json-pane-content {\n flex: 1;\n display: flex;\n flex-direction: column;\n overflow: auto;\n padding: 16px;\n}\n\n.json-meta {\n display: flex;\n gap: 20px;\n margin-bottom: 16px;\n flex-wrap: wrap;\n}\n\n.json-meta .meta-item {\n display: flex;\n flex-direction: column;\n gap: 4px;\n}\n\n.json-meta .meta-item label {\n font-size: 11px;\n text-transform: uppercase;\n color: var(--mj-text-muted);\n font-weight: 600;\n letter-spacing: 0.5px;\n}\n\n.json-meta .meta-item span {\n font-size: 14px;\n color: var(--mj-text-primary);\n font-weight: 500;\n}\n\n.action-link {\n margin-bottom: 12px;\n}\n\n.action-link .btn-link {\n background: none;\n border: none;\n color: var(--mj-brand-primary);\n font-size: 14px;\n cursor: pointer;\n padding: 6px 12px;\n border-radius: 4px;\n transition: all 0.2s;\n display: inline-flex;\n align-items: center;\n gap: 6px;\n}\n\n.action-link .btn-link:hover {\n background: color-mix(in srgb, var(--mj-brand-primary) 8%, var(--mj-bg-surface));\n color: var(--mj-brand-primary-hover);\n}\n\n.json-viewer {\n flex: 1;\n display: flex;\n flex-direction: column;\n background: var(--mj-bg-surface);\n border-radius: 8px;\n border: 1px solid var(--mj-border-default);\n overflow: auto;\n padding: 20px;\n gap: 10px;\n min-height: 0;\n margin-bottom: 45px;\n}\n\n\n.json-toolbar {\n display: flex;\n justify-content: flex-end;\n padding: 8px 12px;\n background: var(--mj-bg-surface-sunken);\n border-bottom: 1px solid var(--mj-border-default);\n}\n\n/* Timeline Styles */\n.timeline-container {\n height: 100%;\n overflow-y: auto;\n padding: 20px;\n}\n\n.timeline-container > .timeline {\n max-width: 900px;\n margin: 0 auto;\n}\n\n.timeline {\n position: relative;\n padding-left: 40px;\n}\n\n.timeline::before {\n content: '';\n position: absolute;\n left: 20px;\n top: 0;\n bottom: 0;\n width: 2px;\n background: var(--mj-border-default);\n}\n\n.timeline-item {\n position: relative;\n margin-bottom: 24px;\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.timeline-item:hover {\n transform: translateX(4px);\n}\n\n.timeline-item.selected {\n transform: translateX(8px);\n}\n\n.timeline-item.selected .timeline-content {\n background: color-mix(in srgb, var(--mj-brand-primary) 8%, var(--mj-bg-surface));\n border-color: var(--mj-brand-primary);\n}\n\n.timeline-marker {\n position: absolute;\n left: -30px;\n top: 0;\n width: 40px;\n height: 40px;\n border-radius: 50%;\n display: flex;\n align-items: center;\n justify-content: center;\n background: var(--mj-bg-surface);\n border: 3px solid var(--mj-border-default);\n z-index: 1;\n transition: all 0.2s ease;\n}\n\n.timeline-marker[data-color=\"success\"] {\n border-color: var(--mj-status-success);\n color: var(--mj-status-success);\n}\n\n.timeline-marker[data-color=\"error\"] {\n border-color: var(--mj-status-error);\n color: var(--mj-status-error);\n}\n\n.timeline-marker[data-color=\"info\"] {\n border-color: var(--mj-status-info);\n color: var(--mj-status-info);\n}\n\n.timeline-marker[data-color=\"warning\"] {\n border-color: var(--mj-status-warning);\n color: var(--mj-status-warning);\n}\n\n.timeline-marker[data-color=\"secondary\"] {\n border-color: var(--mj-text-muted);\n color: var(--mj-text-muted);\n}\n\n.timeline-marker.small {\n width: 28px;\n height: 28px;\n font-size: 12px;\n}\n\n.timeline-content {\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-radius: 12px;\n padding: 16px 20px;\n margin-left: 20px;\n box-shadow: var(--mj-shadow-sm);\n transition: all 0.2s ease;\n}\n\n.timeline-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 8px;\n}\n\n.timeline-header h4 {\n margin: 0;\n font-size: 16px;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n.timeline-header h5 {\n margin: 0;\n font-size: 14px;\n font-weight: 600;\n color: var(--mj-text-secondary);\n}\n\n.timeline-time {\n font-size: 12px;\n color: var(--mj-text-muted);\n font-family: monospace;\n}\n\n.timeline-subtitle {\n font-size: 13px;\n color: var(--mj-text-muted);\n margin-bottom: 8px;\n}\n\n.timeline-meta {\n display: flex;\n gap: 16px;\n font-size: 12px;\n color: var(--mj-text-muted);\n}\n\n.timeline-meta .status {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 2px 8px;\n border-radius: 12px;\n font-size: 11px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.timeline-meta .status[data-status=\"Completed\"] {\n background: color-mix(in srgb, var(--mj-status-success) 15%, var(--mj-bg-surface));\n color: var(--mj-status-success);\n}\n\n.timeline-meta .status[data-status=\"Failed\"] {\n background: color-mix(in srgb, var(--mj-status-error) 15%, var(--mj-bg-surface));\n color: var(--mj-status-error);\n}\n\n.timeline-meta .status[data-status=\"Running\"] {\n background: color-mix(in srgb, var(--mj-status-info) 15%, var(--mj-bg-surface));\n color: var(--mj-status-info);\n}\n\n.timeline-meta .status[data-status=\"Paused\"] {\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-secondary);\n}\n\n.duration {\n display: flex;\n align-items: center;\n gap: 4px;\n}\n\n.timeline-actions {\n position: absolute;\n right: 20px;\n top: 50%;\n transform: translateY(-50%);\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.btn-link {\n background: none;\n border: none;\n color: var(--mj-brand-primary);\n cursor: pointer;\n font-size: 12px;\n display: flex;\n align-items: center;\n gap: 4px;\n padding: 4px 8px;\n border-radius: 4px;\n transition: all 0.2s ease;\n}\n\n.btn-link:hover {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n}\n\n.btn-expand {\n width: 24px;\n height: 24px;\n border: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface);\n border-radius: 4px;\n display: flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n transition: all 0.2s ease;\n color: var(--mj-text-muted);\n font-size: 12px;\n}\n\n.btn-expand:hover {\n background: var(--mj-bg-surface-sunken);\n border-color: var(--mj-border-strong);\n color: var(--mj-text-secondary);\n}\n\n/* Timeline Children */\n.timeline-children {\n position: relative;\n margin-top: 12px;\n margin-bottom: 12px;\n}\n\n.timeline-children::before {\n content: '';\n position: absolute;\n left: -10px;\n top: -12px;\n bottom: 0;\n width: 2px;\n background: var(--mj-border-default);\n}\n\n.child-item {\n margin-bottom: 12px;\n}\n\n.child-item .timeline-content {\n background: var(--mj-bg-surface-sunken);\n border-color: var(--mj-border-default);\n}\n\n/* Sub-run timeline styles */\n.sub-run-timeline {\n background: color-mix(in srgb, var(--mj-brand-primary) 2%, var(--mj-bg-surface));\n border-left: 2px solid color-mix(in srgb, var(--mj-brand-primary) 20%, transparent);\n margin-left: 20px;\n padding-left: 20px;\n margin-top: 8px;\n margin-bottom: 8px;\n}\n\n.sub-run-item .timeline-marker {\n border-width: 2px;\n}\n\n.sub-run-item .timeline-content {\n transition: all 0.2s ease;\n}\n\n/* JSON Detail Pane (in splitter) */\n.json-detail-pane {\n height: 100%;\n display: flex;\n flex-direction: column;\n background: var(--mj-bg-surface);\n border-left: 1px solid var(--mj-border-default);\n}\n\n.json-pane-header {\n padding: 16px 20px;\n background: var(--mj-bg-surface-sunken);\n border-bottom: 1px solid var(--mj-border-default);\n display: flex;\n justify-content: space-between;\n align-items: center;\n flex-shrink: 0;\n}\n\n.json-pane-header h3 {\n margin: 0;\n font-size: 16px;\n color: var(--mj-text-primary);\n display: flex;\n align-items: center;\n gap: 10px;\n font-weight: 600;\n}\n\n.json-pane-content {\n flex: 1;\n overflow-y: auto;\n display: flex;\n flex-direction: column;\n}\n\n.json-meta {\n padding: 16px 20px;\n border-bottom: 1px solid var(--mj-border-default);\n display: flex;\n gap: 20px;\n flex-wrap: wrap;\n flex-shrink: 0;\n}\n\n.json-meta .meta-item {\n display: flex;\n flex-direction: column;\n gap: 4px;\n}\n\n.json-meta label {\n font-size: 11px;\n color: var(--mj-text-muted);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.json-meta span {\n font-size: 14px;\n color: var(--mj-text-primary);\n font-weight: 500;\n}\n\n.action-link {\n padding: 12px 20px;\n border-bottom: 1px solid var(--mj-border-default);\n flex-shrink: 0;\n}\n\n.action-link .btn-link {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n color: var(--mj-brand-primary);\n text-decoration: none;\n font-size: 14px;\n padding: 8px 12px;\n background: color-mix(in srgb, var(--mj-brand-primary) 8%, var(--mj-bg-surface));\n border: 1px solid color-mix(in srgb, var(--mj-brand-primary) 20%, transparent);\n border-radius: 4px;\n transition: all 0.2s;\n cursor: pointer;\n}\n\n.action-link .btn-link:hover {\n background: color-mix(in srgb, var(--mj-brand-primary) 15%, var(--mj-bg-surface));\n border-color: color-mix(in srgb, var(--mj-brand-primary) 35%, transparent);\n text-decoration: none;\n}\n\n\n.json-toolbar {\n display: flex;\n justify-content: flex-end;\n gap: 8px;\n margin-bottom: 8px;\n}\n\n/* Details Tab */\n.details-grid {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));\n gap: 20px;\n padding: 20px;\n}\n\n.detail-item {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.detail-item.full-width {\n grid-column: 1 / -1;\n}\n\n.detail-item label {\n font-size: 12px;\n color: var(--mj-text-muted);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.detail-item span {\n font-size: 14px;\n color: var(--mj-text-secondary);\n}\n\n.error-message {\n background: color-mix(in srgb, var(--mj-status-error) 15%, var(--mj-bg-surface));\n color: var(--mj-status-error);\n padding: 12px;\n border-radius: 8px;\n font-size: 13px;\n}\n\n.result-viewer,\n.state-viewer {\n padding: 20px;\n max-height: 450px;\n overflow: auto;\n display: flex;\n flex-direction: column;\n}\n\n.result-viewer mj-code-editor,\n.state-viewer mj-code-editor {\n flex: 1;\n min-height: 0;\n}\n\n/* Empty States */\n.empty-state,\n.loading-state,\n.error-state {\n text-align: center;\n padding: 60px 20px;\n color: var(--mj-text-muted);\n}\n\n.empty-state i,\n.loading-state i,\n.error-state i {\n opacity: 0.3;\n margin-bottom: 16px;\n}\n\n/* Responsive */\n@media (max-width: 768px) {\n .header-content {\n flex-direction: column;\n gap: 16px;\n }\n \n .header-stats {\n flex-wrap: wrap;\n }\n \n .json-detail-pane {\n width: 100%;\n }\n \n .timeline {\n padding-left: 30px;\n }\n \n .timeline-marker {\n left: -25px;\n width: 32px;\n height: 32px;\n }\n \n .timeline-content {\n margin-left: 10px;\n }\n}\n\n/* Entity Link Styles */\n.entity-link {\n color: var(--mj-brand-primary);\n text-decoration: none;\n transition: all 0.2s ease;\n border-bottom: 1px solid transparent;\n display: inline-block;\n}\n\n.entity-link:hover {\n color: var(--mj-brand-primary-hover);\n border-bottom-color: var(--mj-brand-primary-hover);\n}\n\n.entity-link:active {\n color: var(--mj-brand-primary-hover);\n}\n\n/* Detail Pane Tabs */\n.detail-pane-tabs {\n display: flex;\n gap: 8px;\n margin: 8px 0 0 0;\n border-bottom: 1px solid var(--mj-border-default);\n padding: 0 16px;\n}\n\n.detail-tab {\n padding: 10px 16px;\n background: none;\n border: none;\n border-bottom: 3px solid transparent;\n color: var(--mj-text-muted);\n font-size: 14px;\n font-weight: 500;\n cursor: pointer;\n transition: all 0.2s ease;\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.detail-tab:hover {\n color: var(--mj-text-secondary);\n background: color-mix(in srgb, var(--mj-text-primary) 2%, var(--mj-bg-surface));\n}\n\n.detail-tab.active {\n color: var(--mj-brand-primary);\n border-bottom-color: var(--mj-brand-primary);\n}\n\n.detail-tab i {\n font-size: 14px;\n}\n\n/* Detail Pane Content */\n.detail-pane-content {\n flex: 1;\n overflow-y: auto;\n min-height: 0;\n margin-bottom: 35px;\n}\n\n.detail-pane-content.with-tabs {\n /* When tabs are shown, content starts right after tabs */\n margin-top: 0;\n}\n\n/* Step Payload Diff */\n.step-payload-diff {\n height: 100%;\n overflow-y: auto;\n padding: 16px;\n}\n\n.step-payload-diff mj-deep-diff {\n display: block;\n height: 100%;\n}\n\n/* JSON Viewer adjustments when no tabs */\n.detail-pane-content:not(.with-tabs) .json-viewer {\n margin-top: 16px;\n}"] }]
|
|
1415
|
+
args: [{ standalone: false, selector: 'mj-ai-agent-run-form', template: "<div class=\"record-form-container ai-agent-run-form\">\n <div class=\"record-form\">\n <!-- Header -->\n <div class=\"header\">\n <div class=\"header-content\">\n <div class=\"header-left\">\n <div class=\"icon-wrapper\">\n @if (agent && agent.LogoURL) {\n <img [src]=\"agent.LogoURL\" [alt]=\"agent.Name || 'Agent'\" class=\"agent-logo\" />\n }\n @if (agent && !agent.LogoURL && agent.IconClass) {\n <i class=\"fas\" [ngClass]=\"agent.IconClass\"></i>\n }\n @if (!agent || (!agent.LogoURL && !agent.IconClass)) {\n <i class=\"fas fa-robot\"></i>\n }\n </div>\n <div class=\"header-info\">\n <h2>AI Agent Run</h2>\n <div class=\"meta-info\">\n @if (agent) {\n <span class=\"agent-name\">\n <a href=\"javascript:void(0)\" class=\"entity-link\" (click)=\"openEntityRecord('MJ: AI Agents', record.AgentID)\">\n {{ agent.Name }}\n </a>\n </span>\n }\n <span class=\"run-id\">{{ record.ID }}</span>\n @if (record.ParentRunID) {\n <span class=\"parent-run\">\n <i class=\"fas fa-level-up-alt\"></i>\n <a (click)=\"navigateToParentRun()\" class=\"parent-link\">Parent Run</a>\n </span>\n }\n <!-- Conversation Link Pill -->\n @if (record.ConversationID) {\n <span class=\"conversation-pill\" (click)=\"navigateToConversation()\" title=\"Open conversation in Chat app\">\n <i class=\"fas fa-comments\"></i>\n <span>Conversation</span>\n <i class=\"fas fa-external-link-alt pill-action\"></i>\n </span>\n }\n </div>\n </div>\n </div>\n <div class=\"header-right\">\n <div class=\"status-badge\" [attr.data-status]=\"record.Status\">\n <i class=\"fas\" [ngClass]=\"getStatusIcon(record.Status || '')\"></i>\n {{ record.Status }}\n </div>\n <div class=\"header-actions\">\n <button class=\"btn-icon\" (click)=\"refreshData()\" title=\"Refresh\">\n <i class=\"fas fa-sync-alt\"></i>\n </button>\n </div>\n </div>\n </div>\n <div class=\"header-stats\">\n <div class=\"stat\">\n <span class=\"label\">Started</span>\n <span class=\"value\">{{ record.StartedAt | date:'medium' }}</span>\n </div>\n @if (record.CompletedAt) {\n <div class=\"stat\">\n <span class=\"label\">Completed</span>\n <span class=\"value\">{{ record.CompletedAt | date:'medium' }}</span>\n </div>\n }\n @if (record.CompletedAt) {\n <div class=\"stat\">\n <span class=\"label\">Duration</span>\n <span class=\"value\">{{ calculateDuration(record.StartedAt, record.CompletedAt) }}</span>\n </div>\n }\n @if (record.Success !== null && record.CompletedAt !== null) {\n <div class=\"stat\">\n <span class=\"label\">Result</span>\n <span class=\"value\" [class.success]=\"record.Success\" [class.error]=\"!record.Success\">\n {{ record.Success ? 'Success' : 'Failed' }}\n </span>\n </div>\n }\n @if (costMetrics && (costMetrics.totalTokensInput + costMetrics.totalTokensOutput) > 0) {\n <div class=\"stat\">\n <span class=\"label\">Tokens</span>\n @if (!costMetrics.isLoading) {\n <span class=\"value\">{{ (costMetrics.totalTokensInput + costMetrics.totalTokensOutput) | number:'1.0-0' }}</span>\n }\n @if (costMetrics.isLoading) {\n <span class=\"value loading\"><i class=\"fas fa-spinner fa-spin\"></i></span>\n }\n </div>\n }\n @if (costMetrics && costMetrics.totalCost > 0) {\n <div class=\"stat\">\n <span class=\"label\">Cost</span>\n @if (!costMetrics.isLoading) {\n <span class=\"value\">${{ costMetrics.totalCost | number:'1.2-4' }}</span>\n }\n @if (costMetrics.isLoading) {\n <span class=\"value loading\"><i class=\"fas fa-spinner fa-spin\"></i></span>\n }\n </div>\n }\n @if (record.EffortLevel) {\n <div class=\"stat\">\n <span class=\"label\">Effort Level</span>\n <span class=\"value\">{{ record.EffortLevel }}</span>\n </div>\n }\n </div>\n\n <!-- Configuration Bar (shown below header stats when ConfigurationID exists) -->\n @if (record.ConfigurationID) {\n <div class=\"configuration-bar\">\n <div class=\"config-item\">\n <i class=\"fas fa-cog\"></i>\n <div class=\"config-content\">\n <div class=\"config-label\">Configuration</div>\n <div class=\"config-value\">\n <a href=\"javascript:void(0)\" class=\"entity-link\" (click)=\"openEntityRecord('MJ: AI Configurations', record.ConfigurationID)\">\n {{ record.Configuration || 'Unknown' }}\n </a>\n </div>\n </div>\n </div>\n </div>\n }\n </div>\n\n <!-- Tabs -->\n <div class=\"tabs\">\n <button class=\"tab\" [class.active]=\"activeTab === 'timeline'\" (click)=\"changeTab('timeline')\">\n <i class=\"fas fa-stream\"></i> Timeline\n </button>\n <button class=\"tab\" [class.active]=\"activeTab === 'visualization'\" (click)=\"changeTab('visualization')\">\n <i class=\"fas fa-diagram-project\"></i> Visualization\n </button>\n <button class=\"tab\" [class.active]=\"activeTab === 'analytics'\" (click)=\"changeTab('analytics')\">\n <i class=\"fas fa-chart-line\"></i> Analytics\n </button>\n <button class=\"tab\" [class.active]=\"activeTab === 'details'\" (click)=\"changeTab('details')\">\n <i class=\"fas fa-info-circle\"></i> Details\n </button>\n </div>\n\n <!-- Content -->\n <div class=\"content-area\">\n <!-- Timeline Tab -->\n @if (activeTab === 'timeline') {\n <div class=\"tab-content\" style=\"height: 100%;\">\n <as-split direction=\"horizontal\" style=\"height: 100%;\">\n <!-- Timeline Pane -->\n <as-split-area [size]=\"selectedTimelineItem ? 55 : 100\">\n <mj-ai-agent-run-timeline\n [aiAgentRunId]=\"record.ID\"\n [dataHelper]=\"dataHelper\"\n [autoRefresh]=\"record.Status === 'Running'\"\n [refreshInterval]=\"30000\"\n (itemSelected)=\"selectTimelineItem($event)\"\n (navigateToEntity)=\"navigateToEntityRecord($event)\"\n (agentRunCompleted)=\"onAgentRunCompleted($event)\">\n </mj-ai-agent-run-timeline>\n </as-split-area>\n <!-- JSON Detail Pane -->\n @if (selectedTimelineItem) {\n <as-split-area [size]=\"45\">\n <mj-ai-agent-run-step-detail\n [selectedTimelineItem]=\"selectedTimelineItem\"\n (closePanel)=\"closeJsonPanel()\"\n (navigateToActionLog)=\"navigateToActionLog($event)\"\n (copyToClipboard)=\"copyToClipboard($event)\">\n </mj-ai-agent-run-step-detail>\n </as-split-area>\n }\n </as-split>\n </div>\n }\n\n <!-- Visualization Tab -->\n @if (activeTab === 'visualization') {\n <div class=\"tab-content\" style=\"height: 100%;\">\n @if (visualizationLoaded) {\n <mj-ai-agent-run-visualization\n #visualizationComponent\n [aiAgentRunId]=\"record.ID\"\n [dataHelper]=\"dataHelper\"\n >\n </mj-ai-agent-run-visualization>\n }\n </div>\n }\n\n <!-- Analytics Tab -->\n @if (activeTab === 'analytics') {\n <div class=\"tab-content\" style=\"height: 100%;\">\n @if (analyticsLoaded) {\n <mj-ai-agent-run-analytics\n #analyticsComponent\n [agentRunId]=\"record.ID\"\n >\n </mj-ai-agent-run-analytics>\n }\n </div>\n }\n\n <!-- Details Tab -->\n @if (activeTab === 'details') {\n <div class=\"tab-content\">\n <mj-accordion-panel [Expanded]=\"true\">\n <ng-template mjAccordionTitle>\n <i class=\"fas fa-info-circle\"></i> General Information\n </ng-template>\n <div class=\"details-grid\">\n <div class=\"detail-item\">\n <label>Agent</label>\n <span>\n <a href=\"javascript:void(0)\" class=\"entity-link\" (click)=\"openEntityRecord('MJ: AI Agents', record.AgentID)\">\n {{ agent?.Name || 'N/A' }}\n </a>\n </span>\n </div>\n <div class=\"detail-item\">\n <label>Parent Run ID</label>\n <span>\n @if (record.ParentRunID) {\n <a href=\"javascript:void(0)\" class=\"entity-link\" (click)=\"openEntityRecord('MJ: AI Agent Runs', record.ParentRunID)\">\n {{ record.ParentRunID }}\n </a>\n }\n @if (!record.ParentRunID) {\n <span>None (Root)</span>\n }\n </span>\n </div>\n <div class=\"detail-item\">\n <label>Last Run ID</label>\n <span>\n @if (record.LastRunID) {\n <a href=\"javascript:void(0)\" class=\"entity-link\" (click)=\"openEntityRecord('MJ: AI Agent Runs', record.LastRunID)\">\n {{ record.LastRunID }}\n </a>\n }\n @if (!record.LastRunID) {\n <span>None</span>\n }\n </span>\n </div>\n <div class=\"detail-item\">\n <label>Conversation ID</label>\n <span>\n @if (record.ConversationID) {\n <a href=\"javascript:void(0)\" class=\"entity-link\" (click)=\"openEntityRecord('MJ: Conversations', record.ConversationID)\">\n {{ record.ConversationID }}\n </a>\n }\n @if (!record.ConversationID) {\n <span>N/A</span>\n }\n </span>\n </div>\n <div class=\"detail-item\">\n <label>User</label>\n <span>\n @if (record.UserID) {\n <a href=\"javascript:void(0)\" class=\"entity-link\" (click)=\"openEntityRecord('MJ: Users', record.UserID)\">\n {{ record.User || 'N/A' }}\n </a>\n }\n @if (!record.UserID) {\n <span>N/A</span>\n }\n </span>\n </div>\n </div>\n </mj-accordion-panel>\n <mj-accordion-panel [Expanded]=\"false\">\n <ng-template mjAccordionTitle>\n <i class=\"fas fa-cogs\"></i> Execution Settings\n </ng-template>\n <div class=\"details-grid\">\n <div class=\"detail-item\">\n <label>Override Model</label>\n <span>\n @if (record.OverrideModelID) {\n <a href=\"javascript:void(0)\" class=\"entity-link\" (click)=\"openEntityRecord('MJ: AI Models', record.OverrideModelID)\">\n {{ record.OverrideModel || 'N/A' }}\n </a>\n }\n @if (!record.OverrideModelID) {\n <span>N/A</span>\n }\n </span>\n </div>\n <div class=\"detail-item\">\n <label>Override Vendor</label>\n <span>\n @if (record.OverrideVendorID) {\n <a href=\"javascript:void(0)\" class=\"entity-link\" (click)=\"openEntityRecord('MJ: AI Vendors', record.OverrideVendorID)\">\n {{ record.OverrideVendor || 'N/A' }}\n </a>\n }\n @if (!record.OverrideVendorID) {\n <span>N/A</span>\n }\n </span>\n </div>\n <div class=\"detail-item\">\n <label>Verbose Logging</label>\n <span>{{ record.Verbose ? 'Yes' : 'No' }}</span>\n </div>\n </div>\n </mj-accordion-panel>\n <mj-accordion-panel [Expanded]=\"false\">\n <ng-template mjAccordionTitle>\n <i class=\"fas fa-tasks\"></i> Execution Status\n </ng-template>\n <div class=\"details-grid\">\n <div class=\"detail-item\">\n <label>Status</label>\n <span class=\"status-badge\" [attr.data-status]=\"record.Status\">\n {{ record.Status }}\n </span>\n </div>\n <div class=\"detail-item\">\n <label>Success</label>\n @if (record.Success === null) {\n <span>In Progress</span>\n }\n @else if (record.Success) {\n <span class=\"success\">Yes</span>\n }\n @else {\n <span class=\"error-message\">No</span>\n }\n </div>\n @if (record.Message) {\n <div class=\"detail-item full-width\">\n <label>Message</label>\n <div class=\"message\">{{ record.Message }}</div>\n </div>\n }\n @if (record.ErrorMessage) {\n <div class=\"detail-item full-width\">\n <label>Error Message</label>\n <div class=\"error-message\">{{ record.ErrorMessage }}</div>\n </div>\n }\n </div>\n </mj-accordion-panel>\n <mj-accordion-panel [Expanded]=\"false\">\n <ng-template mjAccordionTitle>\n <i class=\"fas fa-dollar-sign\"></i> Usage & Cost\n </ng-template>\n <div class=\"details-grid\">\n <div class=\"detail-item\">\n <label>Total Tokens Used</label>\n <span>{{ record.TotalTokensUsed ? (record.TotalTokensUsed | number:'1.0-0') : 'N/A' }}</span>\n </div>\n <div class=\"detail-item\">\n <label>Prompt Tokens</label>\n <span>{{ record.TotalPromptTokensUsed ? (record.TotalPromptTokensUsed | number:'1.0-0') : 'N/A' }}</span>\n </div>\n <div class=\"detail-item\">\n <label>Completion Tokens</label>\n <span>{{ record.TotalCompletionTokensUsed ? (record.TotalCompletionTokensUsed | number:'1.0-0') : 'N/A' }}</span>\n </div>\n <div class=\"detail-item\">\n <label>Total Cost</label>\n <span>{{ record.TotalCost != null ? ('$' + (record.TotalCost | number:'1.2-4')) : 'N/A' }}</span>\n </div>\n <div class=\"detail-item\">\n <label>Total Prompt Iterations</label>\n <span>{{ record.TotalPromptIterations != null ? (record.TotalPromptIterations | number:'1.0-0') : 'N/A' }}</span>\n </div>\n </div>\n </mj-accordion-panel>\n @if (record.Result) {\n <mj-accordion-panel [Expanded]=\"false\">\n <ng-template mjAccordionTitle>\n <i class=\"fas fa-code\"></i> Result\n </ng-template>\n <div class=\"result-viewer\">\n @if (isParsingComplete) {\n <mj-code-editor\n [ngModel]=\"parsedResult\"\n [language]=\"'json'\"\n [readonly]=\"true\"\n style=\"height: 300px; width: 100%;\">\n </mj-code-editor>\n } @else {\n <div style=\"padding: 20px; text-align: center; color: var(--mj-text-muted);\">\n <i class=\"fas fa-spinner fa-spin\"></i> Loading result data...\n </div>\n }\n </div>\n </mj-accordion-panel>\n }\n @if (record.StartingPayload) {\n <mj-accordion-panel [Expanded]=\"false\">\n <ng-template mjAccordionTitle>\n <i class=\"fas fa-upload\"></i> Starting Payload\n </ng-template>\n <div class=\"result-viewer\">\n @if (isParsingComplete) {\n <mj-code-editor\n [ngModel]=\"parsedStartingPayload\"\n [language]=\"'json'\"\n [readonly]=\"true\"\n style=\"height: 300px; width: 100%;\">\n </mj-code-editor>\n } @else {\n <div style=\"padding: 20px; text-align: center; color: var(--mj-text-muted);\">\n <i class=\"fas fa-spinner fa-spin\"></i> Loading payload data...\n </div>\n }\n </div>\n </mj-accordion-panel>\n }\n @if (record.Data) {\n <mj-accordion-panel [Expanded]=\"false\">\n <ng-template mjAccordionTitle>\n <i class=\"fas fa-database\"></i> Execution Data\n </ng-template>\n <div class=\"result-viewer\">\n @if (isParsingComplete) {\n <mj-code-editor\n [ngModel]=\"parsedData\"\n [language]=\"'json'\"\n [readonly]=\"true\"\n style=\"height: 300px; width: 100%;\">\n </mj-code-editor>\n } @else {\n <div style=\"padding: 20px; text-align: center; color: var(--mj-text-muted);\">\n <i class=\"fas fa-spinner fa-spin\"></i> Loading execution data...\n </div>\n }\n </div>\n </mj-accordion-panel>\n }\n @if (record.FinalPayload) {\n <mj-accordion-panel [Expanded]=\"false\">\n <ng-template mjAccordionTitle>\n <i class=\"fas fa-download\"></i> Final Payload\n </ng-template>\n <div class=\"result-viewer\">\n @if (isParsingComplete) {\n <mj-code-editor\n [ngModel]=\"parsedFinalPayload\"\n [language]=\"'json'\"\n [readonly]=\"true\"\n style=\"height: 300px; width: 100%;\">\n </mj-code-editor>\n } @else {\n <div style=\"padding: 20px; text-align: center; color: var(--mj-text-muted);\">\n <i class=\"fas fa-spinner fa-spin\"></i> Loading final payload data...\n </div>\n }\n </div>\n </mj-accordion-panel>\n }\n @if (showPayloadDiff) {\n <mj-accordion-panel [Expanded]=\"false\">\n <ng-template mjAccordionTitle>\n <i class=\"fas fa-code-compare\"></i> Payload Diff\n </ng-template>\n <div style=\"padding: 20px; background: var(--mj-bg-surface-card);\">\n @if (isParsingComplete) {\n <mj-deep-diff\n [oldValue]=\"startingPayloadObject\"\n [newValue]=\"finalPayloadObject\"\n [title]=\"''\"\n [showSummary]=\"true\"\n [showUnchanged]=\"false\"\n [expandAll]=\"false\"\n [maxDepth]=\"10\"\n [maxStringLength]=\"200\"\n [treatNullAsUndefined]=\"true\">\n </mj-deep-diff>\n } @else {\n <div style=\"padding: 20px; text-align: center; color: var(--mj-text-muted);\">\n <i class=\"fas fa-spinner fa-spin\"></i> Loading payload diff...\n </div>\n }\n </div>\n </mj-accordion-panel>\n }\n </div>\n }\n</div>\n</div>\n</div>", styles: [".ai-agent-run-form {\n height: 100%;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n}\n\n.record-form-container.ai-agent-run-form > .record-form,\n.ai-agent-run-form > .record-form {\n display: flex;\n flex-direction: column;\n height: 100%;\n min-height: 0;\n}\n\n/* Header Styles */\n.header {\n background: var(--mj-bg-surface);\n border-bottom: 1px solid var(--mj-border-default);\n padding: 20px;\n box-shadow: var(--mj-shadow-sm);\n flex-shrink: 0;\n}\n\n.header-content {\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n margin-bottom: 16px;\n}\n\n.header-left {\n display: flex;\n align-items: center;\n gap: 16px;\n}\n\n.icon-wrapper {\n width: 48px;\n height: 48px;\n background: var(--mj-brand-primary);\n border-radius: 12px;\n display: flex;\n align-items: center;\n justify-content: center;\n color: var(--mj-text-inverse);\n font-size: 20px;\n overflow: hidden;\n}\n\n.agent-logo {\n width: 100%;\n height: 100%;\n object-fit: cover;\n}\n\n.header-info h2 {\n margin: 0;\n font-size: 24px;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n.meta-info {\n display: flex;\n gap: 12px;\n margin-top: 4px;\n font-size: 14px;\n color: var(--mj-text-muted);\n}\n\n.parent-run {\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.parent-link {\n color: var(--mj-status-error);\n text-decoration: none;\n cursor: pointer;\n transition: color 0.2s;\n}\n\n.parent-link:hover {\n color: var(--mj-status-error);\n text-decoration: underline;\n}\n\n.agent-name {\n font-weight: 500;\n color: var(--mj-text-secondary);\n}\n\n.run-id {\n font-family: monospace;\n font-size: 12px;\n opacity: 0.7;\n}\n\n/* Conversation Link Pill */\n.conversation-pill {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 4px 10px;\n background: color-mix(in srgb, var(--mj-brand-primary) 8%, var(--mj-bg-surface));\n border: 1px solid color-mix(in srgb, var(--mj-brand-primary) 20%, transparent);\n border-radius: 16px;\n font-size: 12px;\n font-weight: 500;\n color: var(--mj-brand-primary);\n cursor: pointer;\n transition: all 0.2s ease;\n white-space: nowrap;\n}\n\n.conversation-pill:hover {\n background: color-mix(in srgb, var(--mj-brand-primary) 15%, var(--mj-bg-surface));\n border-color: color-mix(in srgb, var(--mj-brand-primary) 40%, transparent);\n transform: translateY(-1px);\n box-shadow: 0 2px 8px color-mix(in srgb, var(--mj-brand-primary) 15%, transparent);\n}\n\n.conversation-pill i:first-child {\n font-size: 11px;\n opacity: 0.9;\n}\n\n.conversation-pill .pill-action {\n font-size: 9px;\n opacity: 0.6;\n transition: opacity 0.2s ease;\n}\n\n.conversation-pill:hover .pill-action {\n opacity: 1;\n}\n\n.header-right {\n display: flex;\n align-items: center;\n gap: 16px;\n}\n\n.status-badge {\n padding: 6px 16px;\n border-radius: 20px;\n font-size: 13px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n display: inline-flex;\n align-items: center;\n gap: 6px;\n}\n\n.status-badge[data-status=\"Running\"] {\n background: color-mix(in srgb, var(--mj-status-info) 15%, var(--mj-bg-surface));\n color: var(--mj-status-info);\n}\n\n.status-badge[data-status=\"Completed\"] {\n background: color-mix(in srgb, var(--mj-status-success) 15%, var(--mj-bg-surface));\n color: var(--mj-status-success);\n}\n\n.status-badge[data-status=\"Failed\"] {\n background: color-mix(in srgb, var(--mj-status-error) 15%, var(--mj-bg-surface));\n color: var(--mj-status-error);\n}\n\n.status-badge[data-status=\"Cancelled\"] {\n background: color-mix(in srgb, var(--mj-status-warning) 15%, var(--mj-bg-surface));\n color: var(--mj-status-warning);\n}\n\n.status-badge[data-status=\"Paused\"] {\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-secondary);\n}\n\n.status-badge.small {\n padding: 4px 12px;\n font-size: 11px;\n}\n\n.header-actions {\n display: flex;\n gap: 8px;\n}\n\n.btn-icon {\n width: 36px;\n height: 36px;\n border: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface);\n border-radius: 8px;\n display: flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n transition: all 0.2s ease;\n color: var(--mj-text-muted);\n}\n\n.btn-icon:hover {\n background: var(--mj-bg-surface-sunken);\n border-color: var(--mj-border-strong);\n color: var(--mj-text-secondary);\n}\n\n.header-stats {\n display: flex;\n gap: 24px;\n padding-top: 12px;\n border-top: 1px solid var(--mj-border-default);\n}\n\n/* Configuration Bar */\n.configuration-bar {\n display: flex;\n gap: 24px;\n padding-top: 16px;\n border-top: 1px solid var(--mj-border-default);\n margin-top: 16px;\n}\n\n.config-item {\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n.config-item > i {\n font-size: 1.2em;\n color: var(--mj-text-muted);\n width: 24px;\n text-align: center;\n}\n\n.config-content {\n display: flex;\n flex-direction: column;\n}\n\n.config-label {\n font-size: 12px;\n color: var(--mj-text-muted);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.config-value {\n font-size: 14px;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n.config-value .entity-link {\n color: var(--mj-brand-primary);\n text-decoration: none;\n cursor: pointer;\n transition: color 0.2s;\n}\n\n.config-value .entity-link:hover {\n color: var(--mj-brand-primary-hover);\n text-decoration: underline;\n}\n\n.stat {\n display: flex;\n flex-direction: column;\n gap: 4px;\n}\n\n.stat .label {\n font-size: 12px;\n color: var(--mj-text-muted);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.stat .value {\n font-size: 14px;\n font-weight: 500;\n color: var(--mj-text-secondary);\n}\n\n.stat .value.success {\n color: var(--mj-status-success);\n}\n\n.stat .value.error {\n color: var(--mj-status-error);\n}\n\n/* Tabs */\n.tabs {\n display: flex;\n border-bottom: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface-sunken);\n flex-shrink: 0;\n}\n\n.tab {\n padding: 12px 24px;\n border: none;\n background: transparent;\n cursor: pointer;\n font-size: 14px;\n font-weight: 500;\n color: var(--mj-text-muted);\n display: flex;\n align-items: center;\n gap: 8px;\n transition: all 0.2s ease;\n border-bottom: 3px solid transparent;\n}\n\n.tab:hover {\n color: var(--mj-text-secondary);\n background: color-mix(in srgb, var(--mj-text-primary) 2%, var(--mj-bg-surface));\n}\n\n.tab.active {\n color: var(--mj-brand-primary);\n border-bottom-color: var(--mj-brand-primary);\n background: var(--mj-bg-surface);\n}\n\n/* Content Area */\n.content-area {\n position: relative;\n flex: 1;\n min-height: 0;\n overflow: auto;\n background: var(--mj-bg-surface);\n}\n\n.tab-content {\n height: 100%;\n min-height: 0;\n overflow: auto;\n}\n\n/* Details tab accordion panels */\n.tab-content mj-accordion-panel {\n display: block;\n margin-bottom: 8px;\n}\n\n/* JSON Detail Pane */\n.json-detail-pane {\n height: 100%;\n display: flex;\n flex-direction: column;\n background: var(--mj-bg-surface-sunken);\n border-left: 1px solid var(--mj-border-default);\n}\n\n.json-pane-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 16px 20px;\n background: var(--mj-bg-surface);\n border-bottom: 1px solid var(--mj-border-default);\n box-shadow: var(--mj-shadow-sm);\n}\n\n.json-pane-header h3 {\n margin: 0;\n font-size: 16px;\n font-weight: 600;\n color: var(--mj-text-primary);\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.json-pane-header h3 i {\n color: var(--mj-text-muted);\n font-size: 14px;\n}\n\n.json-pane-content {\n flex: 1;\n display: flex;\n flex-direction: column;\n overflow: auto;\n padding: 16px;\n}\n\n.json-meta {\n display: flex;\n gap: 20px;\n margin-bottom: 16px;\n flex-wrap: wrap;\n}\n\n.json-meta .meta-item {\n display: flex;\n flex-direction: column;\n gap: 4px;\n}\n\n.json-meta .meta-item label {\n font-size: 11px;\n text-transform: uppercase;\n color: var(--mj-text-muted);\n font-weight: 600;\n letter-spacing: 0.5px;\n}\n\n.json-meta .meta-item span {\n font-size: 14px;\n color: var(--mj-text-primary);\n font-weight: 500;\n}\n\n.action-link {\n margin-bottom: 12px;\n}\n\n.action-link .btn-link {\n background: none;\n border: none;\n color: var(--mj-brand-primary);\n font-size: 14px;\n cursor: pointer;\n padding: 6px 12px;\n border-radius: 4px;\n transition: all 0.2s;\n display: inline-flex;\n align-items: center;\n gap: 6px;\n}\n\n.action-link .btn-link:hover {\n background: color-mix(in srgb, var(--mj-brand-primary) 8%, var(--mj-bg-surface));\n color: var(--mj-brand-primary-hover);\n}\n\n.json-viewer {\n flex: 1;\n display: flex;\n flex-direction: column;\n background: var(--mj-bg-surface);\n border-radius: 8px;\n border: 1px solid var(--mj-border-default);\n overflow: auto;\n padding: 20px;\n gap: 10px;\n min-height: 0;\n margin-bottom: 45px;\n}\n\n\n.json-toolbar {\n display: flex;\n justify-content: flex-end;\n padding: 8px 12px;\n background: var(--mj-bg-surface-sunken);\n border-bottom: 1px solid var(--mj-border-default);\n}\n\n/* Timeline Styles */\n.timeline-container {\n height: 100%;\n overflow-y: auto;\n padding: 20px;\n}\n\n.timeline-container > .timeline {\n max-width: 900px;\n margin: 0 auto;\n}\n\n.timeline {\n position: relative;\n padding-left: 40px;\n}\n\n.timeline::before {\n content: '';\n position: absolute;\n left: 20px;\n top: 0;\n bottom: 0;\n width: 2px;\n background: var(--mj-border-default);\n}\n\n.timeline-item {\n position: relative;\n margin-bottom: 24px;\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.timeline-item:hover {\n transform: translateX(4px);\n}\n\n.timeline-item.selected {\n transform: translateX(8px);\n}\n\n.timeline-item.selected .timeline-content {\n background: color-mix(in srgb, var(--mj-brand-primary) 8%, var(--mj-bg-surface));\n border-color: var(--mj-brand-primary);\n}\n\n.timeline-marker {\n position: absolute;\n left: -30px;\n top: 0;\n width: 40px;\n height: 40px;\n border-radius: 50%;\n display: flex;\n align-items: center;\n justify-content: center;\n background: var(--mj-bg-surface);\n border: 3px solid var(--mj-border-default);\n z-index: 1;\n transition: all 0.2s ease;\n}\n\n.timeline-marker[data-color=\"success\"] {\n border-color: var(--mj-status-success);\n color: var(--mj-status-success);\n}\n\n.timeline-marker[data-color=\"error\"] {\n border-color: var(--mj-status-error);\n color: var(--mj-status-error);\n}\n\n.timeline-marker[data-color=\"info\"] {\n border-color: var(--mj-status-info);\n color: var(--mj-status-info);\n}\n\n.timeline-marker[data-color=\"warning\"] {\n border-color: var(--mj-status-warning);\n color: var(--mj-status-warning);\n}\n\n.timeline-marker[data-color=\"secondary\"] {\n border-color: var(--mj-text-muted);\n color: var(--mj-text-muted);\n}\n\n.timeline-marker.small {\n width: 28px;\n height: 28px;\n font-size: 12px;\n}\n\n.timeline-content {\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-radius: 12px;\n padding: 16px 20px;\n margin-left: 20px;\n box-shadow: var(--mj-shadow-sm);\n transition: all 0.2s ease;\n}\n\n.timeline-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 8px;\n}\n\n.timeline-header h4 {\n margin: 0;\n font-size: 16px;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n.timeline-header h5 {\n margin: 0;\n font-size: 14px;\n font-weight: 600;\n color: var(--mj-text-secondary);\n}\n\n.timeline-time {\n font-size: 12px;\n color: var(--mj-text-muted);\n font-family: monospace;\n}\n\n.timeline-subtitle {\n font-size: 13px;\n color: var(--mj-text-muted);\n margin-bottom: 8px;\n}\n\n.timeline-meta {\n display: flex;\n gap: 16px;\n font-size: 12px;\n color: var(--mj-text-muted);\n}\n\n.timeline-meta .status {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 2px 8px;\n border-radius: 12px;\n font-size: 11px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.timeline-meta .status[data-status=\"Completed\"] {\n background: color-mix(in srgb, var(--mj-status-success) 15%, var(--mj-bg-surface));\n color: var(--mj-status-success);\n}\n\n.timeline-meta .status[data-status=\"Failed\"] {\n background: color-mix(in srgb, var(--mj-status-error) 15%, var(--mj-bg-surface));\n color: var(--mj-status-error);\n}\n\n.timeline-meta .status[data-status=\"Running\"] {\n background: color-mix(in srgb, var(--mj-status-info) 15%, var(--mj-bg-surface));\n color: var(--mj-status-info);\n}\n\n.timeline-meta .status[data-status=\"Paused\"] {\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-secondary);\n}\n\n.duration {\n display: flex;\n align-items: center;\n gap: 4px;\n}\n\n.timeline-actions {\n position: absolute;\n right: 20px;\n top: 50%;\n transform: translateY(-50%);\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.btn-link {\n background: none;\n border: none;\n color: var(--mj-brand-primary);\n cursor: pointer;\n font-size: 12px;\n display: flex;\n align-items: center;\n gap: 4px;\n padding: 4px 8px;\n border-radius: 4px;\n transition: all 0.2s ease;\n}\n\n.btn-link:hover {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n}\n\n.btn-expand {\n width: 24px;\n height: 24px;\n border: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface);\n border-radius: 4px;\n display: flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n transition: all 0.2s ease;\n color: var(--mj-text-muted);\n font-size: 12px;\n}\n\n.btn-expand:hover {\n background: var(--mj-bg-surface-sunken);\n border-color: var(--mj-border-strong);\n color: var(--mj-text-secondary);\n}\n\n/* Timeline Children */\n.timeline-children {\n position: relative;\n margin-top: 12px;\n margin-bottom: 12px;\n}\n\n.timeline-children::before {\n content: '';\n position: absolute;\n left: -10px;\n top: -12px;\n bottom: 0;\n width: 2px;\n background: var(--mj-border-default);\n}\n\n.child-item {\n margin-bottom: 12px;\n}\n\n.child-item .timeline-content {\n background: var(--mj-bg-surface-sunken);\n border-color: var(--mj-border-default);\n}\n\n/* Sub-run timeline styles */\n.sub-run-timeline {\n background: color-mix(in srgb, var(--mj-brand-primary) 2%, var(--mj-bg-surface));\n border-left: 2px solid color-mix(in srgb, var(--mj-brand-primary) 20%, transparent);\n margin-left: 20px;\n padding-left: 20px;\n margin-top: 8px;\n margin-bottom: 8px;\n}\n\n.sub-run-item .timeline-marker {\n border-width: 2px;\n}\n\n.sub-run-item .timeline-content {\n transition: all 0.2s ease;\n}\n\n/* JSON Detail Pane (in splitter) */\n.json-detail-pane {\n height: 100%;\n display: flex;\n flex-direction: column;\n background: var(--mj-bg-surface);\n border-left: 1px solid var(--mj-border-default);\n}\n\n.json-pane-header {\n padding: 16px 20px;\n background: var(--mj-bg-surface-sunken);\n border-bottom: 1px solid var(--mj-border-default);\n display: flex;\n justify-content: space-between;\n align-items: center;\n flex-shrink: 0;\n}\n\n.json-pane-header h3 {\n margin: 0;\n font-size: 16px;\n color: var(--mj-text-primary);\n display: flex;\n align-items: center;\n gap: 10px;\n font-weight: 600;\n}\n\n.json-pane-content {\n flex: 1;\n overflow-y: auto;\n display: flex;\n flex-direction: column;\n}\n\n.json-meta {\n padding: 16px 20px;\n border-bottom: 1px solid var(--mj-border-default);\n display: flex;\n gap: 20px;\n flex-wrap: wrap;\n flex-shrink: 0;\n}\n\n.json-meta .meta-item {\n display: flex;\n flex-direction: column;\n gap: 4px;\n}\n\n.json-meta label {\n font-size: 11px;\n color: var(--mj-text-muted);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.json-meta span {\n font-size: 14px;\n color: var(--mj-text-primary);\n font-weight: 500;\n}\n\n.action-link {\n padding: 12px 20px;\n border-bottom: 1px solid var(--mj-border-default);\n flex-shrink: 0;\n}\n\n.action-link .btn-link {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n color: var(--mj-brand-primary);\n text-decoration: none;\n font-size: 14px;\n padding: 8px 12px;\n background: color-mix(in srgb, var(--mj-brand-primary) 8%, var(--mj-bg-surface));\n border: 1px solid color-mix(in srgb, var(--mj-brand-primary) 20%, transparent);\n border-radius: 4px;\n transition: all 0.2s;\n cursor: pointer;\n}\n\n.action-link .btn-link:hover {\n background: color-mix(in srgb, var(--mj-brand-primary) 15%, var(--mj-bg-surface));\n border-color: color-mix(in srgb, var(--mj-brand-primary) 35%, transparent);\n text-decoration: none;\n}\n\n\n.json-toolbar {\n display: flex;\n justify-content: flex-end;\n gap: 8px;\n margin-bottom: 8px;\n}\n\n/* Details Tab */\n.details-grid {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));\n gap: 20px;\n padding: 20px;\n}\n\n.detail-item {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.detail-item.full-width {\n grid-column: 1 / -1;\n}\n\n.detail-item label {\n font-size: 12px;\n color: var(--mj-text-muted);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.detail-item span {\n font-size: 14px;\n color: var(--mj-text-secondary);\n}\n\n.error-message {\n background: color-mix(in srgb, var(--mj-status-error) 15%, var(--mj-bg-surface));\n color: var(--mj-status-error);\n padding: 12px;\n border-radius: 8px;\n font-size: 13px;\n}\n\n.result-viewer,\n.state-viewer {\n padding: 20px;\n max-height: 450px;\n overflow: auto;\n display: flex;\n flex-direction: column;\n}\n\n.result-viewer mj-code-editor,\n.state-viewer mj-code-editor {\n flex: 1;\n min-height: 0;\n}\n\n/* Empty States */\n.empty-state,\n.loading-state,\n.error-state {\n text-align: center;\n padding: 60px 20px;\n color: var(--mj-text-muted);\n}\n\n.empty-state i,\n.loading-state i,\n.error-state i {\n opacity: 0.3;\n margin-bottom: 16px;\n}\n\n/* Responsive */\n@media (max-width: 768px) {\n .header-content {\n flex-direction: column;\n gap: 16px;\n }\n \n .header-stats {\n flex-wrap: wrap;\n }\n \n .json-detail-pane {\n width: 100%;\n }\n \n .timeline {\n padding-left: 30px;\n }\n \n .timeline-marker {\n left: -25px;\n width: 32px;\n height: 32px;\n }\n \n .timeline-content {\n margin-left: 10px;\n }\n}\n\n/* Entity Link Styles */\n.entity-link {\n color: var(--mj-brand-primary);\n text-decoration: none;\n transition: all 0.2s ease;\n border-bottom: 1px solid transparent;\n display: inline-block;\n}\n\n.entity-link:hover {\n color: var(--mj-brand-primary-hover);\n border-bottom-color: var(--mj-brand-primary-hover);\n}\n\n.entity-link:active {\n color: var(--mj-brand-primary-hover);\n}\n\n/* Detail Pane Tabs */\n.detail-pane-tabs {\n display: flex;\n gap: 8px;\n margin: 8px 0 0 0;\n border-bottom: 1px solid var(--mj-border-default);\n padding: 0 16px;\n}\n\n.detail-tab {\n padding: 10px 16px;\n background: none;\n border: none;\n border-bottom: 3px solid transparent;\n color: var(--mj-text-muted);\n font-size: 14px;\n font-weight: 500;\n cursor: pointer;\n transition: all 0.2s ease;\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.detail-tab:hover {\n color: var(--mj-text-secondary);\n background: color-mix(in srgb, var(--mj-text-primary) 2%, var(--mj-bg-surface));\n}\n\n.detail-tab.active {\n color: var(--mj-brand-primary);\n border-bottom-color: var(--mj-brand-primary);\n}\n\n.detail-tab i {\n font-size: 14px;\n}\n\n/* Detail Pane Content */\n.detail-pane-content {\n flex: 1;\n overflow-y: auto;\n min-height: 0;\n margin-bottom: 35px;\n}\n\n.detail-pane-content.with-tabs {\n /* When tabs are shown, content starts right after tabs */\n margin-top: 0;\n}\n\n/* Step Payload Diff */\n.step-payload-diff {\n height: 100%;\n overflow-y: auto;\n padding: 16px;\n}\n\n.step-payload-diff mj-deep-diff {\n display: block;\n height: 100%;\n}\n\n/* JSON Viewer adjustments when no tabs */\n.detail-pane-content:not(.with-tabs) .json-viewer {\n margin-top: 16px;\n}"] }]
|
|
1396
1416
|
}], null, { timelineComponent: [{
|
|
1397
1417
|
type: ViewChild,
|
|
1398
1418
|
args: [AIAgentRunTimelineComponent]
|