@memberjunction/ng-core-entity-forms 5.43.0 → 5.44.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/__tests__/model-prediction.logic.test.d.ts +2 -0
- package/dist/__tests__/model-prediction.logic.test.d.ts.map +1 -0
- package/dist/__tests__/model-prediction.logic.test.js +140 -0
- package/dist/__tests__/model-prediction.logic.test.js.map +1 -0
- package/dist/lib/custom/AIAgentSessions/ai-agent-session-form.component.js +79 -105
- package/dist/lib/custom/AIAgentSessions/ai-agent-session-form.component.js.map +1 -1
- package/dist/lib/custom/AIAgents/FlowAgentType/flow-agent-form-section.component.js +7 -10
- package/dist/lib/custom/AIAgents/FlowAgentType/flow-agent-form-section.component.js.map +1 -1
- package/dist/lib/custom/AIAgents/add-action-dialog.component.d.ts.map +1 -1
- package/dist/lib/custom/AIAgents/add-action-dialog.component.js +46 -51
- package/dist/lib/custom/AIAgents/add-action-dialog.component.js.map +1 -1
- package/dist/lib/custom/AIAgents/ai-agent-form.component.d.ts +2 -0
- package/dist/lib/custom/AIAgents/ai-agent-form.component.d.ts.map +1 -1
- package/dist/lib/custom/AIAgents/ai-agent-form.component.js +300 -378
- package/dist/lib/custom/AIAgents/ai-agent-form.component.js.map +1 -1
- package/dist/lib/custom/AIAgents/create-sub-agent-dialog.component.js +22 -29
- package/dist/lib/custom/AIAgents/create-sub-agent-dialog.component.js.map +1 -1
- package/dist/lib/custom/AIAgents/new-agent-dialog.component.js +15 -17
- package/dist/lib/custom/AIAgents/new-agent-dialog.component.js.map +1 -1
- package/dist/lib/custom/AIAgents/prompt-selector-dialog.component.js +27 -34
- package/dist/lib/custom/AIAgents/prompt-selector-dialog.component.js.map +1 -1
- package/dist/lib/custom/AIAgents/sub-agent-selector-dialog.component.d.ts +11 -0
- 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 +48 -47
- package/dist/lib/custom/AIAgents/sub-agent-selector-dialog.component.js.map +1 -1
- package/dist/lib/custom/AIPromptRuns/ai-prompt-run-form.component.js +438 -454
- package/dist/lib/custom/AIPromptRuns/ai-prompt-run-form.component.js.map +1 -1
- package/dist/lib/custom/AIPromptRuns/chat-message-viewer.component.js +48 -51
- package/dist/lib/custom/AIPromptRuns/chat-message-viewer.component.js.map +1 -1
- package/dist/lib/custom/AIPrompts/ai-prompt-form.component.js +253 -282
- package/dist/lib/custom/AIPrompts/ai-prompt-form.component.js.map +1 -1
- package/dist/lib/custom/Actions/action-execution-log-form.component.js +24 -33
- package/dist/lib/custom/Actions/action-execution-log-form.component.js.map +1 -1
- package/dist/lib/custom/Actions/action-form.component.js +263 -311
- package/dist/lib/custom/Actions/action-form.component.js.map +1 -1
- package/dist/lib/custom/Entities/entity-form.component.d.ts +6 -0
- package/dist/lib/custom/Entities/entity-form.component.d.ts.map +1 -1
- package/dist/lib/custom/Entities/entity-form.component.js +475 -493
- package/dist/lib/custom/Entities/entity-form.component.js.map +1 -1
- package/dist/lib/custom/Lists/list-form.component.js +122 -173
- package/dist/lib/custom/Lists/list-form.component.js.map +1 -1
- package/dist/lib/custom/Queries/query-form.component.js +190 -248
- package/dist/lib/custom/Queries/query-form.component.js.map +1 -1
- package/dist/lib/custom/Queries/query-run-dialog.component.js +19 -23
- package/dist/lib/custom/Queries/query-run-dialog.component.js.map +1 -1
- package/dist/lib/custom/SearchScopes/searchscopeprovider-form.component.js +23 -24
- package/dist/lib/custom/SearchScopes/searchscopeprovider-form.component.js.map +1 -1
- package/dist/lib/custom/Templates/template-param-dialog.component.js +14 -23
- package/dist/lib/custom/Templates/template-param-dialog.component.js.map +1 -1
- package/dist/lib/custom/Tests/test-form.component.js +100 -130
- package/dist/lib/custom/Tests/test-form.component.js.map +1 -1
- package/dist/lib/custom/Tests/test-run-form.component.js +187 -205
- package/dist/lib/custom/Tests/test-run-form.component.js.map +1 -1
- package/dist/lib/custom/Tests/test-suite-form.component.d.ts +8 -0
- package/dist/lib/custom/Tests/test-suite-form.component.d.ts.map +1 -1
- package/dist/lib/custom/Tests/test-suite-form.component.js +412 -489
- package/dist/lib/custom/Tests/test-suite-form.component.js.map +1 -1
- package/dist/lib/custom/Tests/test-suite-run-form.component.js +100 -126
- 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 +166 -184
- 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-step-detail.component.js +42 -61
- package/dist/lib/custom/ai-agent-run/ai-agent-run-step-detail.component.js.map +1 -1
- package/dist/lib/custom/ai-agent-run/ai-agent-run-timeline.component.js +8 -17
- 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.component.d.ts +0 -2
- 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 +183 -188
- package/dist/lib/custom/ai-agent-run/ai-agent-run.component.js.map +1 -1
- package/dist/lib/custom/ai-agent-run/flow/agent-run-flow.component.d.ts +108 -0
- package/dist/lib/custom/ai-agent-run/flow/agent-run-flow.component.d.ts.map +1 -0
- package/dist/lib/custom/ai-agent-run/flow/agent-run-flow.component.js +665 -0
- package/dist/lib/custom/ai-agent-run/flow/agent-run-flow.component.js.map +1 -0
- package/dist/lib/custom/ai-agent-run/flow/agent-run-flow.model.d.ts +94 -0
- package/dist/lib/custom/ai-agent-run/flow/agent-run-flow.model.d.ts.map +1 -0
- package/dist/lib/custom/ai-agent-run/flow/agent-run-flow.model.js +257 -0
- package/dist/lib/custom/ai-agent-run/flow/agent-run-flow.model.js.map +1 -0
- package/dist/lib/custom/ai-agent-run/flow/constellation.component.d.ts +38 -0
- package/dist/lib/custom/ai-agent-run/flow/constellation.component.d.ts.map +1 -0
- package/dist/lib/custom/ai-agent-run/flow/constellation.component.js +200 -0
- package/dist/lib/custom/ai-agent-run/flow/constellation.component.js.map +1 -0
- package/dist/lib/custom/ai-agent-run/flow/flame-cascade.component.d.ts +44 -0
- package/dist/lib/custom/ai-agent-run/flow/flame-cascade.component.d.ts.map +1 -0
- package/dist/lib/custom/ai-agent-run/flow/flame-cascade.component.js +180 -0
- package/dist/lib/custom/ai-agent-run/flow/flame-cascade.component.js.map +1 -0
- package/dist/lib/custom/ai-agent-run/flow/flow-svg.util.d.ts +12 -0
- package/dist/lib/custom/ai-agent-run/flow/flow-svg.util.d.ts.map +1 -0
- package/dist/lib/custom/ai-agent-run/flow/flow-svg.util.js +46 -0
- package/dist/lib/custom/ai-agent-run/flow/flow-svg.util.js.map +1 -0
- package/dist/lib/custom/ai-agent-run/flow/flowchart.component.d.ts +64 -0
- package/dist/lib/custom/ai-agent-run/flow/flowchart.component.d.ts.map +1 -0
- package/dist/lib/custom/ai-agent-run/flow/flowchart.component.js +267 -0
- package/dist/lib/custom/ai-agent-run/flow/flowchart.component.js.map +1 -0
- package/dist/lib/custom/ai-agent-run/flow/pan-zoom.d.ts +53 -0
- package/dist/lib/custom/ai-agent-run/flow/pan-zoom.d.ts.map +1 -0
- package/dist/lib/custom/ai-agent-run/flow/pan-zoom.js +111 -0
- package/dist/lib/custom/ai-agent-run/flow/pan-zoom.js.map +1 -0
- package/dist/lib/custom/ai-agent-run/flow/subway-lines.component.d.ts +42 -0
- package/dist/lib/custom/ai-agent-run/flow/subway-lines.component.d.ts.map +1 -0
- package/dist/lib/custom/ai-agent-run/flow/subway-lines.component.js +193 -0
- package/dist/lib/custom/ai-agent-run/flow/subway-lines.component.js.map +1 -0
- package/dist/lib/custom/custom-forms.module.d.ts +58 -51
- package/dist/lib/custom/custom-forms.module.d.ts.map +1 -1
- package/dist/lib/custom/custom-forms.module.js +52 -13
- package/dist/lib/custom/custom-forms.module.js.map +1 -1
- package/dist/lib/custom/shared/entity-selector-dialog.component.d.ts +2 -0
- package/dist/lib/custom/shared/entity-selector-dialog.component.d.ts.map +1 -1
- package/dist/lib/custom/shared/entity-selector-dialog.component.js +25 -25
- 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 +280 -216
- package/dist/lib/generated/Entities/MJAIAgent/mjaiagent.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJAIAgentChannel/mjaiagentchannel.form.component.js +25 -21
- package/dist/lib/generated/Entities/MJAIAgentChannel/mjaiagentchannel.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJAIAgentRun/mjaiagentrun.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJAIAgentRun/mjaiagentrun.form.component.js +68 -14
- package/dist/lib/generated/Entities/MJAIAgentRun/mjaiagentrun.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJAIAgentSession/mjaiagentsession.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJAIAgentSession/mjaiagentsession.form.component.js +44 -32
- package/dist/lib/generated/Entities/MJAIAgentSession/mjaiagentsession.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJAIAgentSkill/mjaiagentskill.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/MJAIAgentSkill/mjaiagentskill.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/MJAIAgentSkill/mjaiagentskill.form.component.js +66 -0
- package/dist/lib/generated/Entities/MJAIAgentSkill/mjaiagentskill.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/MJAIPrompt/mjaiprompt.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJAIPrompt/mjaiprompt.form.component.js +55 -19
- package/dist/lib/generated/Entities/MJAIPrompt/mjaiprompt.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJAIPromptRun/mjaipromptrun.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJAIPromptRun/mjaipromptrun.form.component.js +28 -10
- package/dist/lib/generated/Entities/MJAIPromptRun/mjaipromptrun.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJAISkill/mjaiskill.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/MJAISkill/mjaiskill.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/MJAISkill/mjaiskill.form.component.js +167 -0
- package/dist/lib/generated/Entities/MJAISkill/mjaiskill.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/MJAISkillAction/mjaiskillaction.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/MJAISkillAction/mjaiskillaction.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/MJAISkillAction/mjaiskillaction.form.component.js +64 -0
- package/dist/lib/generated/Entities/MJAISkillAction/mjaiskillaction.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/MJAISkillPermission/mjaiskillpermission.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/MJAISkillPermission/mjaiskillpermission.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/MJAISkillPermission/mjaiskillpermission.form.component.js +82 -0
- package/dist/lib/generated/Entities/MJAISkillPermission/mjaiskillpermission.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/MJAISkillSubAgent/mjaiskillsubagent.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/MJAISkillSubAgent/mjaiskillsubagent.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/MJAISkillSubAgent/mjaiskillsubagent.form.component.js +64 -0
- package/dist/lib/generated/Entities/MJAISkillSubAgent/mjaiskillsubagent.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/MJAction/mjaction.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJAction/mjaction.form.component.js +35 -17
- package/dist/lib/generated/Entities/MJAction/mjaction.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJApplication/mjapplication.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJApplication/mjapplication.form.component.js +59 -51
- package/dist/lib/generated/Entities/MJApplication/mjapplication.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJCollection/mjcollection.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJCollection/mjcollection.form.component.js +25 -7
- package/dist/lib/generated/Entities/MJCollection/mjcollection.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJCollectionArtifact/mjcollectionartifact.form.component.js +11 -7
- package/dist/lib/generated/Entities/MJCollectionArtifact/mjcollectionartifact.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJConversation/mjconversation.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJConversation/mjconversation.form.component.js +56 -46
- package/dist/lib/generated/Entities/MJConversation/mjconversation.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJConversationDetail/mjconversationdetail.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJConversationDetail/mjconversationdetail.form.component.js +73 -59
- package/dist/lib/generated/Entities/MJConversationDetail/mjconversationdetail.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 +24 -4
- package/dist/lib/generated/Entities/MJDuplicateRunDetailMatch/mjduplicaterundetailmatch.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJEntity/mjentity.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJEntity/mjentity.form.component.js +137 -87
- package/dist/lib/generated/Entities/MJEntity/mjentity.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJEntityDocument/mjentitydocument.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJEntityDocument/mjentitydocument.form.component.js +47 -29
- package/dist/lib/generated/Entities/MJEntityDocument/mjentitydocument.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJExperiment/mjexperiment.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/MJExperiment/mjexperiment.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/MJExperiment/mjexperiment.form.component.js +99 -0
- package/dist/lib/generated/Entities/MJExperiment/mjexperiment.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/MJExperimentSession/mjexperimentsession.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/MJExperimentSession/mjexperimentsession.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/MJExperimentSession/mjexperimentsession.form.component.js +101 -0
- package/dist/lib/generated/Entities/MJExperimentSession/mjexperimentsession.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/MJExperimentSessionIteration/mjexperimentsessioniteration.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/MJExperimentSessionIteration/mjexperimentsessioniteration.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/MJExperimentSessionIteration/mjexperimentsessioniteration.form.component.js +115 -0
- package/dist/lib/generated/Entities/MJExperimentSessionIteration/mjexperimentsessioniteration.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/MJFile/mjfile.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJFile/mjfile.form.component.js +63 -9
- package/dist/lib/generated/Entities/MJFile/mjfile.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJFileStorageProvider/mjfilestorageprovider.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJFileStorageProvider/mjfilestorageprovider.form.component.js +32 -14
- package/dist/lib/generated/Entities/MJFileStorageProvider/mjfilestorageprovider.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJMLAlgorithm/mjmlalgorithm.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/MJMLAlgorithm/mjmlalgorithm.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/MJMLAlgorithm/mjmlalgorithm.form.component.js +161 -0
- package/dist/lib/generated/Entities/MJMLAlgorithm/mjmlalgorithm.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/MJMLAlgorithmUseCase/mjmlalgorithmusecase.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/MJMLAlgorithmUseCase/mjmlalgorithmusecase.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/MJMLAlgorithmUseCase/mjmlalgorithmusecase.form.component.js +89 -0
- package/dist/lib/generated/Entities/MJMLAlgorithmUseCase/mjmlalgorithmusecase.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/MJMLAlgorithmUseCaseRanking/mjmlalgorithmusecaseranking.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/MJMLAlgorithmUseCaseRanking/mjmlalgorithmusecaseranking.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/MJMLAlgorithmUseCaseRanking/mjmlalgorithmusecaseranking.form.component.js +76 -0
- package/dist/lib/generated/Entities/MJMLAlgorithmUseCaseRanking/mjmlalgorithmusecaseranking.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/MJMLModel/mjmlmodel.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/MJMLModel/mjmlmodel.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/MJMLModel/mjmlmodel.form.component.js +141 -0
- package/dist/lib/generated/Entities/MJMLModel/mjmlmodel.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/MJMLModelScoringBinding/mjmlmodelscoringbinding.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/MJMLModelScoringBinding/mjmlmodelscoringbinding.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/MJMLModelScoringBinding/mjmlmodelscoringbinding.form.component.js +88 -0
- package/dist/lib/generated/Entities/MJMLModelScoringBinding/mjmlmodelscoringbinding.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/MJMLTrainingPipeline/mjmltrainingpipeline.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/MJMLTrainingPipeline/mjmltrainingpipeline.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/MJMLTrainingPipeline/mjmltrainingpipeline.form.component.js +143 -0
- package/dist/lib/generated/Entities/MJMLTrainingPipeline/mjmltrainingpipeline.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/MJMLTrainingRun/mjmltrainingrun.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/MJMLTrainingRun/mjmltrainingrun.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/MJMLTrainingRun/mjmltrainingrun.form.component.js +110 -0
- package/dist/lib/generated/Entities/MJMLTrainingRun/mjmltrainingrun.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/MJOpenApp/mjopenapp.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJOpenApp/mjopenapp.form.component.js +54 -24
- package/dist/lib/generated/Entities/MJOpenApp/mjopenapp.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJRecordProcess/mjrecordprocess.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJRecordProcess/mjrecordprocess.form.component.js +24 -6
- package/dist/lib/generated/Entities/MJRecordProcess/mjrecordprocess.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJRole/mjrole.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJRole/mjrole.form.component.js +36 -18
- package/dist/lib/generated/Entities/MJRole/mjrole.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJSchemaInfo/mjschemainfo.form.component.js +8 -6
- package/dist/lib/generated/Entities/MJSchemaInfo/mjschemainfo.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJScopedPromptPart/mjscopedpromptpart.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/MJScopedPromptPart/mjscopedpromptpart.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/MJScopedPromptPart/mjscopedpromptpart.form.component.js +78 -0
- package/dist/lib/generated/Entities/MJScopedPromptPart/mjscopedpromptpart.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/MJUser/mjuser.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJUser/mjuser.form.component.js +145 -109
- package/dist/lib/generated/Entities/MJUser/mjuser.form.component.js.map +1 -1
- package/dist/lib/generated/generated-forms.module.d.ts +356 -335
- package/dist/lib/generated/generated-forms.module.d.ts.map +1 -1
- package/dist/lib/generated/generated-forms.module.js +304 -226
- package/dist/lib/generated/generated-forms.module.js.map +1 -1
- package/dist/lib/panels/ai-agents/agent-realtime.panel.js +44 -44
- package/dist/lib/panels/ai-agents/agent-realtime.panel.js.map +1 -1
- package/dist/lib/panels/ai-skill-sharing/ai-skill-sharing-panel.component.d.ts +43 -0
- package/dist/lib/panels/ai-skill-sharing/ai-skill-sharing-panel.component.d.ts.map +1 -0
- package/dist/lib/panels/ai-skill-sharing/ai-skill-sharing-panel.component.js +240 -0
- package/dist/lib/panels/ai-skill-sharing/ai-skill-sharing-panel.component.js.map +1 -0
- package/dist/lib/panels/model-predictions/model-prediction.logic.d.ts +69 -0
- package/dist/lib/panels/model-predictions/model-prediction.logic.d.ts.map +1 -0
- package/dist/lib/panels/model-predictions/model-prediction.logic.js +130 -0
- package/dist/lib/panels/model-predictions/model-prediction.logic.js.map +1 -0
- package/dist/lib/panels/model-predictions/model-prediction.panel.d.ts +83 -0
- package/dist/lib/panels/model-predictions/model-prediction.panel.d.ts.map +1 -0
- package/dist/lib/panels/model-predictions/model-prediction.panel.js +293 -0
- package/dist/lib/panels/model-predictions/model-prediction.panel.js.map +1 -0
- package/package.json +38 -37
- package/dist/lib/custom/ai-agent-run/ai-agent-run-visualization.component.d.ts +0 -82
- package/dist/lib/custom/ai-agent-run/ai-agent-run-visualization.component.d.ts.map +0 -1
- package/dist/lib/custom/ai-agent-run/ai-agent-run-visualization.component.js +0 -1033
- package/dist/lib/custom/ai-agent-run/ai-agent-run-visualization.component.js.map +0 -1
|
@@ -0,0 +1,665 @@
|
|
|
1
|
+
import { Component, Input, ViewChild, NgZone, ChangeDetectorRef, ChangeDetectionStrategy, inject } from '@angular/core';
|
|
2
|
+
import { Subject } from 'rxjs';
|
|
3
|
+
import { combineLatest } from 'rxjs';
|
|
4
|
+
import { takeUntil } from 'rxjs/operators';
|
|
5
|
+
import { CompositeKey } from '@memberjunction/core';
|
|
6
|
+
import { SharedService } from '@memberjunction/ng-shared';
|
|
7
|
+
import { AIEngineBase } from '@memberjunction/ai-engine-base';
|
|
8
|
+
import { UserInfoEngine } from '@memberjunction/core-entities';
|
|
9
|
+
import { buildFlowModel, activeLeaf, ancestors, formatDuration, shortLabel, FLOW_COLORS, FLOW_EMOJI, FLOW_LABEL } from './agent-run-flow.model';
|
|
10
|
+
import { FlameCascadeComponent } from './flame-cascade.component';
|
|
11
|
+
import { SubwayLinesComponent } from './subway-lines.component';
|
|
12
|
+
import { ConstellationComponent } from './constellation.component';
|
|
13
|
+
import { FlowchartComponent } from './flowchart.component';
|
|
14
|
+
import * as i0 from "@angular/core";
|
|
15
|
+
import * as i1 from "@angular/common";
|
|
16
|
+
import * as i2 from "@memberjunction/ng-shared-generic";
|
|
17
|
+
import * as i3 from "../ai-agent-run-step-detail.component";
|
|
18
|
+
import * as i4 from "./flame-cascade.component";
|
|
19
|
+
import * as i5 from "./subway-lines.component";
|
|
20
|
+
import * as i6 from "./constellation.component";
|
|
21
|
+
import * as i7 from "./flowchart.component";
|
|
22
|
+
const _c0 = ["scrub"];
|
|
23
|
+
const _c1 = ["clock"];
|
|
24
|
+
const _c2 = ["crumb"];
|
|
25
|
+
const _c3 = ["nowIco"];
|
|
26
|
+
const _c4 = ["nowName"];
|
|
27
|
+
const _c5 = ["nowType"];
|
|
28
|
+
const _c6 = ["nowDur"];
|
|
29
|
+
const _c7 = ["nowModel"];
|
|
30
|
+
const _c8 = ["nowStat"];
|
|
31
|
+
const _c9 = ["nowBar"];
|
|
32
|
+
const _c10 = ["loglist"];
|
|
33
|
+
const _forTrack0 = ($index, $item) => $item.key;
|
|
34
|
+
function AIAgentRunFlowComponent_For_3_Conditional_4_Template(rf, ctx) { if (rf & 1) {
|
|
35
|
+
i0.ɵɵelementStart(0, "span", 27);
|
|
36
|
+
i0.ɵɵtext(1, "Soon");
|
|
37
|
+
i0.ɵɵelementEnd();
|
|
38
|
+
} }
|
|
39
|
+
function AIAgentRunFlowComponent_For_3_Template(rf, ctx) { if (rf & 1) {
|
|
40
|
+
const _r1 = i0.ɵɵgetCurrentView();
|
|
41
|
+
i0.ɵɵelementStart(0, "button", 25);
|
|
42
|
+
i0.ɵɵlistener("click", function AIAgentRunFlowComponent_For_3_Template_button_click_0_listener() { const m_r2 = i0.ɵɵrestoreView(_r1).$implicit; const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.selectMode(m_r2)); });
|
|
43
|
+
i0.ɵɵelement(1, "i", 26);
|
|
44
|
+
i0.ɵɵelementStart(2, "span");
|
|
45
|
+
i0.ɵɵtext(3);
|
|
46
|
+
i0.ɵɵelementEnd();
|
|
47
|
+
i0.ɵɵconditionalCreate(4, AIAgentRunFlowComponent_For_3_Conditional_4_Template, 2, 0, "span", 27);
|
|
48
|
+
i0.ɵɵelementEnd();
|
|
49
|
+
} if (rf & 2) {
|
|
50
|
+
const m_r2 = ctx.$implicit;
|
|
51
|
+
const ctx_r2 = i0.ɵɵnextContext();
|
|
52
|
+
i0.ɵɵclassProp("on", ctx_r2.mode === m_r2.key)("soon", !m_r2.enabled);
|
|
53
|
+
i0.ɵɵproperty("disabled", !m_r2.enabled)("title", m_r2.enabled ? m_r2.label : m_r2.label + " \u2014 coming soon");
|
|
54
|
+
i0.ɵɵadvance();
|
|
55
|
+
i0.ɵɵproperty("ngClass", m_r2.icon);
|
|
56
|
+
i0.ɵɵadvance(2);
|
|
57
|
+
i0.ɵɵtextInterpolate(m_r2.label);
|
|
58
|
+
i0.ɵɵadvance();
|
|
59
|
+
i0.ɵɵconditional(!m_r2.enabled ? 4 : -1);
|
|
60
|
+
} }
|
|
61
|
+
function AIAgentRunFlowComponent_Conditional_6_Template(rf, ctx) { if (rf & 1) {
|
|
62
|
+
i0.ɵɵelementStart(0, "div", 16);
|
|
63
|
+
i0.ɵɵelement(1, "mj-loading", 28);
|
|
64
|
+
i0.ɵɵelementEnd();
|
|
65
|
+
} }
|
|
66
|
+
function AIAgentRunFlowComponent_Conditional_7_Template(rf, ctx) { if (rf & 1) {
|
|
67
|
+
i0.ɵɵelementStart(0, "div", 17);
|
|
68
|
+
i0.ɵɵelement(1, "i", 29);
|
|
69
|
+
i0.ɵɵelementStart(2, "p");
|
|
70
|
+
i0.ɵɵtext(3, "No steps recorded for this run yet.");
|
|
71
|
+
i0.ɵɵelementEnd()();
|
|
72
|
+
} }
|
|
73
|
+
function AIAgentRunFlowComponent_Conditional_12_Template(rf, ctx) { if (rf & 1) {
|
|
74
|
+
const _r4 = i0.ɵɵgetCurrentView();
|
|
75
|
+
i0.ɵɵelementStart(0, "div", 20)(1, "button", 30);
|
|
76
|
+
i0.ɵɵlistener("click", function AIAgentRunFlowComponent_Conditional_12_Template_button_click_1_listener() { i0.ɵɵrestoreView(_r4); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.zoomIn()); });
|
|
77
|
+
i0.ɵɵelement(2, "i", 31);
|
|
78
|
+
i0.ɵɵelementEnd();
|
|
79
|
+
i0.ɵɵelementStart(3, "button", 32);
|
|
80
|
+
i0.ɵɵlistener("click", function AIAgentRunFlowComponent_Conditional_12_Template_button_click_3_listener() { i0.ɵɵrestoreView(_r4); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.zoomOut()); });
|
|
81
|
+
i0.ɵɵelement(4, "i", 33);
|
|
82
|
+
i0.ɵɵelementEnd();
|
|
83
|
+
i0.ɵɵelementStart(5, "button", 34);
|
|
84
|
+
i0.ɵɵlistener("click", function AIAgentRunFlowComponent_Conditional_12_Template_button_click_5_listener() { i0.ɵɵrestoreView(_r4); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.fitReset()); });
|
|
85
|
+
i0.ɵɵelement(6, "i", 35);
|
|
86
|
+
i0.ɵɵelementEnd()();
|
|
87
|
+
} }
|
|
88
|
+
function AIAgentRunFlowComponent_Conditional_13_Template(rf, ctx) { if (rf & 1) {
|
|
89
|
+
const _r5 = i0.ɵɵgetCurrentView();
|
|
90
|
+
i0.ɵɵelementStart(0, "aside", 36)(1, "div", 37);
|
|
91
|
+
i0.ɵɵlistener("mousedown", function AIAgentRunFlowComponent_Conditional_13_Template_div_mousedown_1_listener($event) { i0.ɵɵrestoreView(_r5); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.startResize($event)); });
|
|
92
|
+
i0.ɵɵelementEnd();
|
|
93
|
+
i0.ɵɵelementStart(2, "div", 38)(3, "div", 39);
|
|
94
|
+
i0.ɵɵtext(4, "Now executing");
|
|
95
|
+
i0.ɵɵelementEnd();
|
|
96
|
+
i0.ɵɵelement(5, "div", 40, 0);
|
|
97
|
+
i0.ɵɵelementStart(7, "div", 41)(8, "div", 42, 1);
|
|
98
|
+
i0.ɵɵtext(10, "\uD83E\uDD16");
|
|
99
|
+
i0.ɵɵelementEnd();
|
|
100
|
+
i0.ɵɵelementStart(11, "h3", null, 2);
|
|
101
|
+
i0.ɵɵtext(13, "\u2014");
|
|
102
|
+
i0.ɵɵelementEnd();
|
|
103
|
+
i0.ɵɵelementStart(14, "div", 43, 3);
|
|
104
|
+
i0.ɵɵtext(16, "Agent run");
|
|
105
|
+
i0.ɵɵelementEnd();
|
|
106
|
+
i0.ɵɵelementStart(17, "div", 44)(18, "div");
|
|
107
|
+
i0.ɵɵtext(19, "Duration");
|
|
108
|
+
i0.ɵɵelementStart(20, "b", null, 4);
|
|
109
|
+
i0.ɵɵtext(22, "\u2014");
|
|
110
|
+
i0.ɵɵelementEnd()();
|
|
111
|
+
i0.ɵɵelementStart(23, "div");
|
|
112
|
+
i0.ɵɵtext(24, "Status");
|
|
113
|
+
i0.ɵɵelementStart(25, "b", null, 5);
|
|
114
|
+
i0.ɵɵtext(27, "\u2014");
|
|
115
|
+
i0.ɵɵelementEnd()();
|
|
116
|
+
i0.ɵɵelementStart(28, "div");
|
|
117
|
+
i0.ɵɵtext(29, "Model");
|
|
118
|
+
i0.ɵɵelementStart(30, "b", null, 6);
|
|
119
|
+
i0.ɵɵtext(32, "\u2014");
|
|
120
|
+
i0.ɵɵelementEnd()()();
|
|
121
|
+
i0.ɵɵelementStart(33, "div", 45);
|
|
122
|
+
i0.ɵɵelement(34, "div", 46, 7);
|
|
123
|
+
i0.ɵɵelementEnd()()();
|
|
124
|
+
i0.ɵɵelementStart(36, "div", 47)(37, "div", 48);
|
|
125
|
+
i0.ɵɵtext(38, "Execution log");
|
|
126
|
+
i0.ɵɵelementEnd();
|
|
127
|
+
i0.ɵɵelement(39, "div", 49, 8);
|
|
128
|
+
i0.ɵɵelementEnd()();
|
|
129
|
+
} if (rf & 2) {
|
|
130
|
+
const ctx_r2 = i0.ɵɵnextContext();
|
|
131
|
+
i0.ɵɵstyleProp("width", ctx_r2.panelWidth, "px");
|
|
132
|
+
} }
|
|
133
|
+
function AIAgentRunFlowComponent_Conditional_14_Template(rf, ctx) { if (rf & 1) {
|
|
134
|
+
const _r6 = i0.ɵɵgetCurrentView();
|
|
135
|
+
i0.ɵɵelementStart(0, "aside", 50)(1, "div", 37);
|
|
136
|
+
i0.ɵɵlistener("mousedown", function AIAgentRunFlowComponent_Conditional_14_Template_div_mousedown_1_listener($event) { i0.ɵɵrestoreView(_r6); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.startResize($event)); });
|
|
137
|
+
i0.ɵɵelementEnd();
|
|
138
|
+
i0.ɵɵelementStart(2, "mj-ai-agent-run-step-detail", 51);
|
|
139
|
+
i0.ɵɵlistener("closePanel", function AIAgentRunFlowComponent_Conditional_14_Template_mj_ai_agent_run_step_detail_closePanel_2_listener() { i0.ɵɵrestoreView(_r6); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.closeDetail()); })("navigateToActionLog", function AIAgentRunFlowComponent_Conditional_14_Template_mj_ai_agent_run_step_detail_navigateToActionLog_2_listener($event) { i0.ɵɵrestoreView(_r6); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.onDetailNavigateActionLog($event)); })("copyToClipboard", function AIAgentRunFlowComponent_Conditional_14_Template_mj_ai_agent_run_step_detail_copyToClipboard_2_listener($event) { i0.ɵɵrestoreView(_r6); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.onDetailCopy($event)); });
|
|
140
|
+
i0.ɵɵelementEnd()();
|
|
141
|
+
} if (rf & 2) {
|
|
142
|
+
const ctx_r2 = i0.ɵɵnextContext();
|
|
143
|
+
i0.ɵɵstyleProp("width", ctx_r2.panelWidth, "px");
|
|
144
|
+
i0.ɵɵadvance(2);
|
|
145
|
+
i0.ɵɵproperty("selectedTimelineItem", ctx_r2.selectedStepItem);
|
|
146
|
+
} }
|
|
147
|
+
function AIAgentRunFlowComponent_Conditional_15_Template(rf, ctx) { if (rf & 1) {
|
|
148
|
+
const _r7 = i0.ɵɵgetCurrentView();
|
|
149
|
+
i0.ɵɵelementStart(0, "div", 23)(1, "button", 52);
|
|
150
|
+
i0.ɵɵlistener("click", function AIAgentRunFlowComponent_Conditional_15_Template_button_click_1_listener() { i0.ɵɵrestoreView(_r7); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.togglePlay()); });
|
|
151
|
+
i0.ɵɵelement(2, "i", 26);
|
|
152
|
+
i0.ɵɵelementEnd();
|
|
153
|
+
i0.ɵɵelementStart(3, "button", 53);
|
|
154
|
+
i0.ɵɵlistener("click", function AIAgentRunFlowComponent_Conditional_15_Template_button_click_3_listener() { i0.ɵɵrestoreView(_r7); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.restart()); });
|
|
155
|
+
i0.ɵɵelement(4, "i", 54);
|
|
156
|
+
i0.ɵɵelementEnd();
|
|
157
|
+
i0.ɵɵelementStart(5, "input", 55, 9);
|
|
158
|
+
i0.ɵɵlistener("input", function AIAgentRunFlowComponent_Conditional_15_Template_input_input_5_listener() { i0.ɵɵrestoreView(_r7); const scrub_r8 = i0.ɵɵreference(6); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.onScrub(scrub_r8.value)); });
|
|
159
|
+
i0.ɵɵelementEnd();
|
|
160
|
+
i0.ɵɵelementStart(7, "div", 56, 10);
|
|
161
|
+
i0.ɵɵtext(9, "0s / 0s");
|
|
162
|
+
i0.ɵɵelementEnd();
|
|
163
|
+
i0.ɵɵelementStart(10, "div", 57);
|
|
164
|
+
i0.ɵɵelement(11, "i", 58);
|
|
165
|
+
i0.ɵɵelementStart(12, "input", 59);
|
|
166
|
+
i0.ɵɵlistener("input", function AIAgentRunFlowComponent_Conditional_15_Template_input_input_12_listener($event) { i0.ɵɵrestoreView(_r7); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.onSpeed($event.target.value)); });
|
|
167
|
+
i0.ɵɵelementEnd();
|
|
168
|
+
i0.ɵɵelementStart(13, "span", 60);
|
|
169
|
+
i0.ɵɵtext(14);
|
|
170
|
+
i0.ɵɵelementEnd()()();
|
|
171
|
+
} if (rf & 2) {
|
|
172
|
+
const ctx_r2 = i0.ɵɵnextContext();
|
|
173
|
+
i0.ɵɵadvance();
|
|
174
|
+
i0.ɵɵproperty("disabled", !ctx_r2.hasData)("title", ctx_r2.playing ? "Pause" : "Play");
|
|
175
|
+
i0.ɵɵadvance();
|
|
176
|
+
i0.ɵɵproperty("ngClass", ctx_r2.playing ? "fa-pause" : "fa-play");
|
|
177
|
+
i0.ɵɵadvance();
|
|
178
|
+
i0.ɵɵproperty("disabled", !ctx_r2.hasData);
|
|
179
|
+
i0.ɵɵadvance(2);
|
|
180
|
+
i0.ɵɵproperty("disabled", !ctx_r2.hasData);
|
|
181
|
+
i0.ɵɵadvance(9);
|
|
182
|
+
i0.ɵɵtextInterpolate1("", ctx_r2.speed.toFixed(1), "\u00D7");
|
|
183
|
+
} }
|
|
184
|
+
function AIAgentRunFlowComponent_Conditional_17_Template(rf, ctx) { if (rf & 1) {
|
|
185
|
+
i0.ɵɵelementStart(0, "span");
|
|
186
|
+
i0.ɵɵelement(1, "i", 61);
|
|
187
|
+
i0.ɵɵtext(2, "Hint:");
|
|
188
|
+
i0.ɵɵelementEnd();
|
|
189
|
+
i0.ɵɵelementStart(3, "span", 62);
|
|
190
|
+
i0.ɵɵtext(4, "Playback is compressed so every step is visible \u2014 real duration shows through heat, size & speed, not literal width.");
|
|
191
|
+
i0.ɵɵelementEnd();
|
|
192
|
+
} }
|
|
193
|
+
function AIAgentRunFlowComponent_Conditional_18_Template(rf, ctx) { if (rf & 1) {
|
|
194
|
+
i0.ɵɵelementStart(0, "span");
|
|
195
|
+
i0.ɵɵelement(1, "i", 61);
|
|
196
|
+
i0.ɵɵtext(2, "Tip:");
|
|
197
|
+
i0.ɵɵelementEnd();
|
|
198
|
+
i0.ɵɵelementStart(3, "span", 62);
|
|
199
|
+
i0.ɵɵtext(4, "Drag to pan, scroll to zoom, click any node to inspect it. Layout is the full execution tree, top to bottom.");
|
|
200
|
+
i0.ɵɵelementEnd();
|
|
201
|
+
} }
|
|
202
|
+
/**
|
|
203
|
+
* Flow — the playable, zoomed-out execution view for an Agent Run.
|
|
204
|
+
*
|
|
205
|
+
* Owns the single master clock (scrub / play / speed) and the narration rail,
|
|
206
|
+
* and hosts three interchangeable renderers (Flame, Subway, Constellation).
|
|
207
|
+
* The per-frame loop runs *outside* Angular's zone and pushes updates straight
|
|
208
|
+
* to the DOM / active renderer, so 60fps playback never triggers change detection.
|
|
209
|
+
*/
|
|
210
|
+
export class AIAgentRunFlowComponent {
|
|
211
|
+
constructor() {
|
|
212
|
+
this.agentName = null;
|
|
213
|
+
this.runStatus = '';
|
|
214
|
+
this.agentIconClass = null;
|
|
215
|
+
this.agentLogoUrl = null;
|
|
216
|
+
this.modes = [
|
|
217
|
+
{ key: 'subway', label: 'Subway Lines', icon: 'fa-train-subway', enabled: true },
|
|
218
|
+
{ key: 'constellation', label: 'Constellation', icon: 'fa-star', enabled: true },
|
|
219
|
+
{ key: 'flow', label: 'Flow', icon: 'fa-diagram-project', enabled: true },
|
|
220
|
+
{ key: 'flame', label: 'Flame Cascade', icon: 'fa-fire', enabled: true }
|
|
221
|
+
];
|
|
222
|
+
this.mode = 'subway';
|
|
223
|
+
this.model = null;
|
|
224
|
+
this.playing = false;
|
|
225
|
+
this.speed = 1;
|
|
226
|
+
this.loading = true;
|
|
227
|
+
this.hasData = false;
|
|
228
|
+
/** Selected node detail (any mode). */
|
|
229
|
+
this.selectedStepItem = null;
|
|
230
|
+
this.selectedNodeId = -1;
|
|
231
|
+
this.logRows = new Map();
|
|
232
|
+
this.lastActiveRowId = -1;
|
|
233
|
+
/** Right-panel width (rail / inspector), resizable + persisted per user. Default is 50px wider than the old fixed panel. */
|
|
234
|
+
this.panelWidth = 410;
|
|
235
|
+
this.PANEL_KEY = 'mj.agentRunFlow.panelWidth.v1';
|
|
236
|
+
this.resizing = false;
|
|
237
|
+
this.resizeStartX = 0;
|
|
238
|
+
this.resizeStartW = 0;
|
|
239
|
+
this.destroy$ = new Subject();
|
|
240
|
+
this.rafId = null;
|
|
241
|
+
this.p = 0;
|
|
242
|
+
this.lastTs = 0;
|
|
243
|
+
this.PLAY_MS = 11000;
|
|
244
|
+
this.logModelRef = null;
|
|
245
|
+
this.lastLeafId = -1;
|
|
246
|
+
this.viewReady = false;
|
|
247
|
+
this.zone = inject(NgZone);
|
|
248
|
+
this.cdr = inject(ChangeDetectorRef);
|
|
249
|
+
}
|
|
250
|
+
/** The animated modes share the master clock + narration rail; Flow is static. */
|
|
251
|
+
get isAnimated() { return this.mode !== 'flow'; }
|
|
252
|
+
/** Rail (now-executing + log tree) shows only for animated modes with nothing selected. */
|
|
253
|
+
get showRail() { return this.isAnimated && !this.selectedStepItem; }
|
|
254
|
+
ngAfterViewInit() {
|
|
255
|
+
this.viewReady = true;
|
|
256
|
+
const savedW = UserInfoEngine.Instance.GetSetting(this.PANEL_KEY);
|
|
257
|
+
if (savedW) {
|
|
258
|
+
const n = +savedW;
|
|
259
|
+
if (n >= 280)
|
|
260
|
+
this.panelWidth = Math.min(n, this.maxPanelWidth());
|
|
261
|
+
}
|
|
262
|
+
combineLatest([this.dataHelper.steps$, this.dataHelper.loading$])
|
|
263
|
+
.pipe(takeUntil(this.destroy$))
|
|
264
|
+
.subscribe(([steps, loading]) => {
|
|
265
|
+
this.loading = loading && steps.length === 0;
|
|
266
|
+
if (!loading || steps.length > 0)
|
|
267
|
+
this.rebuildModel();
|
|
268
|
+
this.cdr.markForCheck();
|
|
269
|
+
});
|
|
270
|
+
this.zone.runOutsideAngular(() => {
|
|
271
|
+
this.rafId = requestAnimationFrame(ts => this.tick(ts));
|
|
272
|
+
});
|
|
273
|
+
}
|
|
274
|
+
ngOnDestroy() {
|
|
275
|
+
this.destroy$.next();
|
|
276
|
+
this.destroy$.complete();
|
|
277
|
+
if (this.rafId != null)
|
|
278
|
+
cancelAnimationFrame(this.rafId);
|
|
279
|
+
}
|
|
280
|
+
async rebuildModel() {
|
|
281
|
+
const wasEmpty = !this.model;
|
|
282
|
+
await AIEngineBase.Instance.EnsureLoaded(); // agent icons/logos read synchronously during build
|
|
283
|
+
const rootIcon = { iconClass: this.agentIconClass || 'fa-robot', logoUrl: this.agentLogoUrl };
|
|
284
|
+
const model = await buildFlowModel(this.agentName ?? '', this.runStatus, rootIcon, this.dataHelper);
|
|
285
|
+
this.model = model;
|
|
286
|
+
this.hasData = model.leaves.length > 0;
|
|
287
|
+
if (wasEmpty)
|
|
288
|
+
this.p = 0;
|
|
289
|
+
this.lastLeafId = -1;
|
|
290
|
+
this.cdr.markForCheck();
|
|
291
|
+
}
|
|
292
|
+
/* -------------------------------- transport ------------------------------- */
|
|
293
|
+
togglePlay() {
|
|
294
|
+
if (!this.hasData)
|
|
295
|
+
return;
|
|
296
|
+
if (this.p >= 1)
|
|
297
|
+
this.p = 0;
|
|
298
|
+
this.playing = !this.playing;
|
|
299
|
+
this.lastTs = 0;
|
|
300
|
+
}
|
|
301
|
+
restart() {
|
|
302
|
+
if (!this.hasData)
|
|
303
|
+
return;
|
|
304
|
+
this.p = 0;
|
|
305
|
+
this.playing = true;
|
|
306
|
+
this.lastTs = 0;
|
|
307
|
+
this.lastLeafId = -1;
|
|
308
|
+
}
|
|
309
|
+
onScrub(value) {
|
|
310
|
+
this.p = (+value) / 1000;
|
|
311
|
+
this.playing = false;
|
|
312
|
+
}
|
|
313
|
+
onSpeed(value) { this.speed = (+value) / 100; }
|
|
314
|
+
selectMode(m) {
|
|
315
|
+
if (!m.enabled)
|
|
316
|
+
return;
|
|
317
|
+
this.mode = m.key;
|
|
318
|
+
this.applyRendererSelection(this.selectedNodeId === -1 ? null : this.selectedNodeId);
|
|
319
|
+
this.currentRenderer?.ReapplyView?.(); // ensure the now-visible renderer shows its OWN (per-type) zoom
|
|
320
|
+
}
|
|
321
|
+
get currentRenderer() {
|
|
322
|
+
switch (this.mode) {
|
|
323
|
+
case 'flame': return this.flame;
|
|
324
|
+
case 'subway': return this.subway;
|
|
325
|
+
case 'constellation': return this.constellation;
|
|
326
|
+
case 'flow': return this.flowchart;
|
|
327
|
+
default: return undefined;
|
|
328
|
+
}
|
|
329
|
+
}
|
|
330
|
+
/* --------------------------- zoom (shared toolbar) ------------------------ */
|
|
331
|
+
zoomIn() { this.currentRenderer?.ZoomIn?.(); }
|
|
332
|
+
zoomOut() { this.currentRenderer?.ZoomOut?.(); }
|
|
333
|
+
fitReset() { this.currentRenderer?.FitReset?.(); }
|
|
334
|
+
/* ---------------------------- panel resize ------------------------------- */
|
|
335
|
+
/** Cap the right panel at 75% of the viewport width. */
|
|
336
|
+
maxPanelWidth() { return Math.max(360, window.innerWidth * 0.75); }
|
|
337
|
+
startResize(e) {
|
|
338
|
+
e.preventDefault();
|
|
339
|
+
this.resizing = true;
|
|
340
|
+
this.resizeStartX = e.clientX;
|
|
341
|
+
this.resizeStartW = this.panelWidth;
|
|
342
|
+
const move = (ev) => {
|
|
343
|
+
if (!this.resizing)
|
|
344
|
+
return;
|
|
345
|
+
const w = this.resizeStartW + (this.resizeStartX - ev.clientX); // drag left → wider
|
|
346
|
+
this.panelWidth = Math.max(280, Math.min(this.maxPanelWidth(), w));
|
|
347
|
+
this.cdr.markForCheck();
|
|
348
|
+
};
|
|
349
|
+
const up = () => {
|
|
350
|
+
this.resizing = false;
|
|
351
|
+
window.removeEventListener('mousemove', move);
|
|
352
|
+
window.removeEventListener('mouseup', up);
|
|
353
|
+
UserInfoEngine.Instance.SetSettingDebounced(this.PANEL_KEY, String(Math.round(this.panelWidth)));
|
|
354
|
+
};
|
|
355
|
+
window.addEventListener('mousemove', move);
|
|
356
|
+
window.addEventListener('mouseup', up);
|
|
357
|
+
}
|
|
358
|
+
/* -------------------------------- selection ------------------------------ */
|
|
359
|
+
/** A node was clicked in any renderer (or a log row) — highlight it everywhere and show its detail. */
|
|
360
|
+
selectStep(n) {
|
|
361
|
+
this.zone.run(() => {
|
|
362
|
+
this.selectedNodeId = n.id;
|
|
363
|
+
this.selectedStepItem = this.toTimelineItem(n);
|
|
364
|
+
this.cdr.markForCheck();
|
|
365
|
+
});
|
|
366
|
+
this.applyRendererSelection(n.id);
|
|
367
|
+
}
|
|
368
|
+
closeDetail() {
|
|
369
|
+
this.zone.run(() => { this.selectedStepItem = null; this.selectedNodeId = -1; this.cdr.markForCheck(); });
|
|
370
|
+
this.applyRendererSelection(null);
|
|
371
|
+
this.flowchart?.Deselect();
|
|
372
|
+
}
|
|
373
|
+
applyRendererSelection(id) {
|
|
374
|
+
this.flame?.SetSelected(id);
|
|
375
|
+
this.subway?.SetSelected(id);
|
|
376
|
+
this.constellation?.SetSelected(id);
|
|
377
|
+
}
|
|
378
|
+
onDetailNavigateActionLog(logId) {
|
|
379
|
+
SharedService.Instance.OpenEntityRecord('MJ: Action Execution Logs', CompositeKey.FromID(logId));
|
|
380
|
+
}
|
|
381
|
+
async onDetailCopy(text) {
|
|
382
|
+
try {
|
|
383
|
+
await navigator.clipboard.writeText(text);
|
|
384
|
+
}
|
|
385
|
+
catch { /* clipboard unavailable */ }
|
|
386
|
+
}
|
|
387
|
+
toTimelineItem(n) {
|
|
388
|
+
if (!n.raw)
|
|
389
|
+
return null;
|
|
390
|
+
return {
|
|
391
|
+
id: n.raw.ID, type: 'step', title: n.name, subtitle: `Type: ${n.raw.StepType}`,
|
|
392
|
+
status: n.status, startTime: n.raw.StartedAt, endTime: n.raw.CompletedAt || undefined,
|
|
393
|
+
duration: formatDuration(n.realDur), icon: 'fa-circle', color: '', data: n.raw, level: n.depth
|
|
394
|
+
};
|
|
395
|
+
}
|
|
396
|
+
/* ------------------------------- master loop ------------------------------ */
|
|
397
|
+
tick(ts) {
|
|
398
|
+
const animated = this.isAnimated;
|
|
399
|
+
if (animated && this.playing && this.hasData) {
|
|
400
|
+
if (!this.lastTs)
|
|
401
|
+
this.lastTs = ts;
|
|
402
|
+
const dt = ts - this.lastTs;
|
|
403
|
+
this.lastTs = ts;
|
|
404
|
+
this.p += dt / (this.PLAY_MS / this.speed);
|
|
405
|
+
if (this.p >= 1) {
|
|
406
|
+
this.p = 1;
|
|
407
|
+
this.playing = false;
|
|
408
|
+
this.zone.run(() => this.cdr.markForCheck());
|
|
409
|
+
}
|
|
410
|
+
}
|
|
411
|
+
else {
|
|
412
|
+
this.lastTs = 0;
|
|
413
|
+
}
|
|
414
|
+
if (this.viewReady && this.model && this.hasData) {
|
|
415
|
+
if (animated) {
|
|
416
|
+
this.currentRenderer?.Render(this.p, ts);
|
|
417
|
+
this.updateRail(ts);
|
|
418
|
+
}
|
|
419
|
+
else {
|
|
420
|
+
// Flow (static): just ensure the flowchart is built; no clock.
|
|
421
|
+
this.flowchart?.Render(0, ts);
|
|
422
|
+
}
|
|
423
|
+
}
|
|
424
|
+
this.rafId = requestAnimationFrame(t => this.tick(t));
|
|
425
|
+
}
|
|
426
|
+
/* ------------------------------ narration rail ---------------------------- */
|
|
427
|
+
updateRail(_ts) {
|
|
428
|
+
const m = this.model;
|
|
429
|
+
// (Re)populate the imperative rail content whenever the rail DOM is fresh
|
|
430
|
+
// (the @if remounted it with template defaults) or the model changed. Without
|
|
431
|
+
// this, a remount at run-completion leaves an empty log + a blank now-card.
|
|
432
|
+
if (this.loglistRef &&
|
|
433
|
+
(this.logModelRef !== m || (this.loglistRef.nativeElement.childElementCount === 0 && m.nodes.length > 1))) {
|
|
434
|
+
this.buildLogTree();
|
|
435
|
+
this.logModelRef = m;
|
|
436
|
+
this.lastLeafId = -1; // force the now-card to repopulate the fresh DOM
|
|
437
|
+
}
|
|
438
|
+
const leaf = activeLeaf(m, this.p);
|
|
439
|
+
const prog = this.p >= leaf.t1 ? 1 : Math.max(0, (this.p - leaf.t0) / (leaf.t1 - leaf.t0));
|
|
440
|
+
if (this.scrubRef)
|
|
441
|
+
this.scrubRef.nativeElement.value = String(Math.round(this.p * 1000));
|
|
442
|
+
if (this.clockRef) {
|
|
443
|
+
const realT = this.p >= 1 ? m.total : leaf.r0 + prog * leaf.realDur;
|
|
444
|
+
this.clockRef.nativeElement.textContent = `${formatDuration(realT)} / ${formatDuration(m.total)}`;
|
|
445
|
+
}
|
|
446
|
+
if (this.nowBarRef)
|
|
447
|
+
this.nowBarRef.nativeElement.style.width = `${prog * 100}%`;
|
|
448
|
+
if (leaf.id !== this.lastLeafId) {
|
|
449
|
+
this.lastLeafId = leaf.id;
|
|
450
|
+
this.refreshNowCard(leaf);
|
|
451
|
+
}
|
|
452
|
+
if (this.nowStatRef) {
|
|
453
|
+
this.nowStatRef.nativeElement.textContent = this.p >= 1 ? 'done' : (this.p > leaf.t0 ? 'running' : 'starting');
|
|
454
|
+
}
|
|
455
|
+
if (this.loglistRef)
|
|
456
|
+
this.updateLogTree();
|
|
457
|
+
}
|
|
458
|
+
refreshNowCard(leaf) {
|
|
459
|
+
const col = FLOW_COLORS[leaf.type];
|
|
460
|
+
if (this.nowIcoRef)
|
|
461
|
+
this.nowIcoRef.nativeElement.textContent = FLOW_EMOJI[leaf.type];
|
|
462
|
+
if (this.nowNameRef)
|
|
463
|
+
this.nowNameRef.nativeElement.textContent = leaf.name;
|
|
464
|
+
if (this.nowTypeRef) {
|
|
465
|
+
this.nowTypeRef.nativeElement.textContent = FLOW_LABEL[leaf.type];
|
|
466
|
+
this.nowTypeRef.nativeElement.style.color = col;
|
|
467
|
+
}
|
|
468
|
+
if (this.nowDurRef)
|
|
469
|
+
this.nowDurRef.nativeElement.textContent = formatDuration(leaf.realDur);
|
|
470
|
+
if (this.nowModelRef)
|
|
471
|
+
this.nowModelRef.nativeElement.textContent = leaf.model ?? '—';
|
|
472
|
+
if (this.crumbRef) {
|
|
473
|
+
const chain = ancestors(leaf);
|
|
474
|
+
this.crumbRef.nativeElement.innerHTML = chain.map((n, i) => `${i ? '<span class="sep">›</span>' : ''}<span style="color:${FLOW_COLORS[n.type]}">${FLOW_EMOJI[n.type]} ${this.escape(n.name)}</span>`).join('');
|
|
475
|
+
}
|
|
476
|
+
}
|
|
477
|
+
/* ------------------------------ log tree (rail) --------------------------- */
|
|
478
|
+
/** Build a clickable indented tree of every step, mirroring the run hierarchy. */
|
|
479
|
+
buildLogTree() {
|
|
480
|
+
const list = this.loglistRef.nativeElement;
|
|
481
|
+
list.innerHTML = '';
|
|
482
|
+
this.logRows.clear();
|
|
483
|
+
this.lastActiveRowId = -1;
|
|
484
|
+
const m = this.model;
|
|
485
|
+
for (const n of m.nodes) {
|
|
486
|
+
if (n.depth === 0)
|
|
487
|
+
continue; // skip the synthetic root (it's the header)
|
|
488
|
+
const col = FLOW_COLORS[n.type];
|
|
489
|
+
const row = document.createElement('div');
|
|
490
|
+
row.className = 'ftree-row';
|
|
491
|
+
row.style.paddingLeft = `${6 + (n.depth - 1) * 15}px`;
|
|
492
|
+
const ico = n.logoUrl
|
|
493
|
+
? `<img class="ftree-logo" src="${this.escape(n.logoUrl)}" alt=""/>`
|
|
494
|
+
: `<i class="ftree-ico fa-solid ${this.escape(n.iconClass)}" style="color:${col}"></i>`;
|
|
495
|
+
row.innerHTML = ico +
|
|
496
|
+
`<span class="ftree-name">${this.escape(shortLabel(n))}</span>` +
|
|
497
|
+
`<span class="ftree-dur">${formatDuration(n.realDur)}</span>`;
|
|
498
|
+
row.addEventListener('click', () => this.selectStep(n));
|
|
499
|
+
list.appendChild(row);
|
|
500
|
+
this.logRows.set(n.id, row);
|
|
501
|
+
}
|
|
502
|
+
}
|
|
503
|
+
/** Sync each log row's state (pending / running / done / selected) with the clock. */
|
|
504
|
+
updateLogTree() {
|
|
505
|
+
const m = this.model;
|
|
506
|
+
for (const n of m.nodes) {
|
|
507
|
+
if (n.depth === 0)
|
|
508
|
+
continue;
|
|
509
|
+
const row = this.logRows.get(n.id);
|
|
510
|
+
if (!row)
|
|
511
|
+
continue;
|
|
512
|
+
const started = this.p >= n.t0;
|
|
513
|
+
const active = started && this.p < n.t1;
|
|
514
|
+
row.classList.toggle('ftree-pending', !started);
|
|
515
|
+
row.classList.toggle('ftree-active', active);
|
|
516
|
+
row.classList.toggle('ftree-done', this.p >= n.t1);
|
|
517
|
+
row.classList.toggle('ftree-selected', n.id === this.selectedNodeId);
|
|
518
|
+
if (active && n.id !== this.lastActiveRowId && !n.children.length) {
|
|
519
|
+
this.lastActiveRowId = n.id;
|
|
520
|
+
row.scrollIntoView({ block: 'nearest' });
|
|
521
|
+
}
|
|
522
|
+
}
|
|
523
|
+
}
|
|
524
|
+
escape(s) {
|
|
525
|
+
return s.replace(/[&<>"]/g, c => ({ '&': '&', '<': '<', '>': '>', '"': '"' }[c] ?? c));
|
|
526
|
+
}
|
|
527
|
+
static { this.ɵfac = function AIAgentRunFlowComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || AIAgentRunFlowComponent)(); }; }
|
|
528
|
+
static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: AIAgentRunFlowComponent, selectors: [["mj-ai-agent-run-flow"]], viewQuery: function AIAgentRunFlowComponent_Query(rf, ctx) { if (rf & 1) {
|
|
529
|
+
i0.ɵɵviewQuery(FlameCascadeComponent, 5)(SubwayLinesComponent, 5)(ConstellationComponent, 5)(FlowchartComponent, 5)(_c0, 5)(_c1, 5)(_c2, 5)(_c3, 5)(_c4, 5)(_c5, 5)(_c6, 5)(_c7, 5)(_c8, 5)(_c9, 5)(_c10, 5);
|
|
530
|
+
} if (rf & 2) {
|
|
531
|
+
let _t;
|
|
532
|
+
i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.flame = _t.first);
|
|
533
|
+
i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.subway = _t.first);
|
|
534
|
+
i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.constellation = _t.first);
|
|
535
|
+
i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.flowchart = _t.first);
|
|
536
|
+
i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.scrubRef = _t.first);
|
|
537
|
+
i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.clockRef = _t.first);
|
|
538
|
+
i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.crumbRef = _t.first);
|
|
539
|
+
i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.nowIcoRef = _t.first);
|
|
540
|
+
i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.nowNameRef = _t.first);
|
|
541
|
+
i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.nowTypeRef = _t.first);
|
|
542
|
+
i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.nowDurRef = _t.first);
|
|
543
|
+
i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.nowModelRef = _t.first);
|
|
544
|
+
i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.nowStatRef = _t.first);
|
|
545
|
+
i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.nowBarRef = _t.first);
|
|
546
|
+
i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.loglistRef = _t.first);
|
|
547
|
+
} }, inputs: { aiAgentRunId: "aiAgentRunId", dataHelper: "dataHelper", agentName: "agentName", runStatus: "runStatus", agentIconClass: "agentIconClass", agentLogoUrl: "agentLogoUrl" }, standalone: false, decls: 19, vars: 18, consts: [["crumb", ""], ["nowIco", ""], ["nowName", ""], ["nowType", ""], ["nowDur", ""], ["nowStat", ""], ["nowModel", ""], ["nowBar", ""], ["loglist", ""], ["scrub", ""], ["clock", ""], [1, "flow-cockpit"], [1, "flow-modes"], [1, "flow-mode", 3, "on", "soon", "disabled", "title"], [1, "flow-main"], [1, "flow-stage"], [1, "flow-overlay"], [1, "flow-overlay", "flow-empty"], [3, "nodeSelected", "Model"], [3, "nodeSelected", "selectionCleared", "Model"], [1, "flow-zoom"], [1, "flow-rail", 3, "width"], [1, "flow-detail", 3, "width"], [1, "flow-transport"], [1, "flow-legend"], [1, "flow-mode", 3, "click", "disabled", "title"], [1, "fas", 3, "ngClass"], [1, "soon-tag"], ["text", "Building flow\u2026"], [1, "fas", "fa-wind"], ["title", "Zoom in", 1, "fz-btn", 3, "click"], [1, "fas", "fa-magnifying-glass-plus"], ["title", "Zoom out", 1, "fz-btn", 3, "click"], [1, "fas", "fa-magnifying-glass-minus"], ["title", "Fit to view", 1, "fz-btn", 3, "click"], [1, "fas", "fa-expand"], [1, "flow-rail"], ["title", "Drag to resize", 1, "flow-resizer", 3, "mousedown"], [1, "now"], [1, "rail-lbl"], [1, "breadcrumb"], [1, "nowcard"], [1, "ico"], [1, "type"], [1, "meta"], [1, "barbg"], [1, "barfg"], [1, "log"], [1, "rail-lbl", "sticky"], [1, "loglist"], [1, "flow-detail"], [3, "closePanel", "navigateToActionLog", "copyToClipboard", "selectedTimelineItem"], [1, "pbtn", 3, "click", "disabled", "title"], ["title", "Restart", 1, "ibtn", 3, "click", "disabled"], [1, "fas", "fa-rotate-left"], ["type", "range", "min", "0", "max", "1000", "value", "0", 1, "scrub", 3, "input", "disabled"], [1, "clock"], [1, "speedbox"], [1, "fas", "fa-gauge-high"], ["type", "range", "min", "25", "max", "300", "value", "100", 1, "speed", 3, "input"], [1, "spdval"], [1, "lg", 2, "background", "var(--mj-text-muted)"], [1, "legend-note"]], template: function AIAgentRunFlowComponent_Template(rf, ctx) { if (rf & 1) {
|
|
548
|
+
i0.ɵɵelementStart(0, "div", 11)(1, "div", 12);
|
|
549
|
+
i0.ɵɵrepeaterCreate(2, AIAgentRunFlowComponent_For_3_Template, 5, 9, "button", 13, _forTrack0);
|
|
550
|
+
i0.ɵɵelementEnd();
|
|
551
|
+
i0.ɵɵelementStart(4, "div", 14)(5, "div", 15);
|
|
552
|
+
i0.ɵɵconditionalCreate(6, AIAgentRunFlowComponent_Conditional_6_Template, 2, 0, "div", 16)(7, AIAgentRunFlowComponent_Conditional_7_Template, 4, 0, "div", 17);
|
|
553
|
+
i0.ɵɵelementStart(8, "mj-agent-flow-flame", 18);
|
|
554
|
+
i0.ɵɵlistener("nodeSelected", function AIAgentRunFlowComponent_Template_mj_agent_flow_flame_nodeSelected_8_listener($event) { return ctx.selectStep($event); });
|
|
555
|
+
i0.ɵɵelementEnd();
|
|
556
|
+
i0.ɵɵelementStart(9, "mj-agent-flow-subway", 18);
|
|
557
|
+
i0.ɵɵlistener("nodeSelected", function AIAgentRunFlowComponent_Template_mj_agent_flow_subway_nodeSelected_9_listener($event) { return ctx.selectStep($event); });
|
|
558
|
+
i0.ɵɵelementEnd();
|
|
559
|
+
i0.ɵɵelementStart(10, "mj-agent-flow-constellation", 18);
|
|
560
|
+
i0.ɵɵlistener("nodeSelected", function AIAgentRunFlowComponent_Template_mj_agent_flow_constellation_nodeSelected_10_listener($event) { return ctx.selectStep($event); });
|
|
561
|
+
i0.ɵɵelementEnd();
|
|
562
|
+
i0.ɵɵelementStart(11, "mj-agent-flow-flowchart", 19);
|
|
563
|
+
i0.ɵɵlistener("nodeSelected", function AIAgentRunFlowComponent_Template_mj_agent_flow_flowchart_nodeSelected_11_listener($event) { return ctx.selectStep($event); })("selectionCleared", function AIAgentRunFlowComponent_Template_mj_agent_flow_flowchart_selectionCleared_11_listener() { return ctx.closeDetail(); });
|
|
564
|
+
i0.ɵɵelementEnd();
|
|
565
|
+
i0.ɵɵconditionalCreate(12, AIAgentRunFlowComponent_Conditional_12_Template, 7, 0, "div", 20);
|
|
566
|
+
i0.ɵɵelementEnd();
|
|
567
|
+
i0.ɵɵconditionalCreate(13, AIAgentRunFlowComponent_Conditional_13_Template, 41, 2, "aside", 21);
|
|
568
|
+
i0.ɵɵconditionalCreate(14, AIAgentRunFlowComponent_Conditional_14_Template, 3, 3, "aside", 22);
|
|
569
|
+
i0.ɵɵelementEnd();
|
|
570
|
+
i0.ɵɵconditionalCreate(15, AIAgentRunFlowComponent_Conditional_15_Template, 15, 6, "div", 23);
|
|
571
|
+
i0.ɵɵelementStart(16, "div", 24);
|
|
572
|
+
i0.ɵɵconditionalCreate(17, AIAgentRunFlowComponent_Conditional_17_Template, 5, 0)(18, AIAgentRunFlowComponent_Conditional_18_Template, 5, 0);
|
|
573
|
+
i0.ɵɵelementEnd()();
|
|
574
|
+
} if (rf & 2) {
|
|
575
|
+
i0.ɵɵadvance(2);
|
|
576
|
+
i0.ɵɵrepeater(ctx.modes);
|
|
577
|
+
i0.ɵɵadvance(4);
|
|
578
|
+
i0.ɵɵconditional(ctx.loading ? 6 : !ctx.hasData ? 7 : -1);
|
|
579
|
+
i0.ɵɵadvance(2);
|
|
580
|
+
i0.ɵɵclassProp("flow-hidden", ctx.mode !== "flame");
|
|
581
|
+
i0.ɵɵproperty("Model", ctx.model);
|
|
582
|
+
i0.ɵɵadvance();
|
|
583
|
+
i0.ɵɵclassProp("flow-hidden", ctx.mode !== "subway");
|
|
584
|
+
i0.ɵɵproperty("Model", ctx.model);
|
|
585
|
+
i0.ɵɵadvance();
|
|
586
|
+
i0.ɵɵclassProp("flow-hidden", ctx.mode !== "constellation");
|
|
587
|
+
i0.ɵɵproperty("Model", ctx.model);
|
|
588
|
+
i0.ɵɵadvance();
|
|
589
|
+
i0.ɵɵclassProp("flow-hidden", ctx.mode !== "flow");
|
|
590
|
+
i0.ɵɵproperty("Model", ctx.model);
|
|
591
|
+
i0.ɵɵadvance();
|
|
592
|
+
i0.ɵɵconditional(ctx.hasData ? 12 : -1);
|
|
593
|
+
i0.ɵɵadvance();
|
|
594
|
+
i0.ɵɵconditional(ctx.showRail ? 13 : -1);
|
|
595
|
+
i0.ɵɵadvance();
|
|
596
|
+
i0.ɵɵconditional(ctx.selectedStepItem ? 14 : -1);
|
|
597
|
+
i0.ɵɵadvance();
|
|
598
|
+
i0.ɵɵconditional(ctx.isAnimated ? 15 : -1);
|
|
599
|
+
i0.ɵɵadvance(2);
|
|
600
|
+
i0.ɵɵconditional(ctx.isAnimated ? 17 : 18);
|
|
601
|
+
} }, dependencies: [i1.NgClass, i2.LoadingComponent, i3.AIAgentRunStepDetailComponent, i4.FlameCascadeComponent, i5.SubwayLinesComponent, i6.ConstellationComponent, i7.FlowchartComponent], styles: ["[_nghost-%COMP%] { display: block; height: 100%; }\n\n.flow-cockpit[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n height: 100%;\n background: var(--mj-bg-surface);\n color: var(--mj-text-primary);\n}\n\n\n\n.flow-modes[_ngcontent-%COMP%] {\n display: flex;\n gap: 6px;\n padding: 10px 14px;\n flex-wrap: wrap;\n border-bottom: 1px solid var(--mj-border-subtle);\n}\n.flow-mode[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 8px;\n padding: 7px 14px;\n border: 1px solid var(--mj-border-default);\n border-radius: 999px;\n background: var(--mj-bg-surface-card);\n color: var(--mj-text-secondary);\n font-weight: 600;\n font-size: 12.5px;\n cursor: pointer;\n transition: 0.15s;\n}\n.flow-mode[_ngcontent-%COMP%]:hover:not(:disabled) { color: var(--mj-text-primary); border-color: var(--mj-brand-primary); }\n.flow-mode.on[_ngcontent-%COMP%] {\n color: var(--mj-text-inverse);\n background: var(--mj-brand-primary);\n border-color: var(--mj-brand-primary);\n box-shadow: 0 0 14px color-mix(in srgb, var(--mj-brand-primary) 35%, transparent);\n}\n.flow-mode.soon[_ngcontent-%COMP%] { cursor: not-allowed; opacity: 0.6; }\n.soon-tag[_ngcontent-%COMP%] {\n font-size: 9px;\n font-weight: 700;\n letter-spacing: 0.5px;\n text-transform: uppercase;\n padding: 2px 6px;\n border-radius: 6px;\n background: color-mix(in srgb, var(--mj-text-muted) 20%, transparent);\n color: var(--mj-text-muted);\n}\n\n\n\n.flow-main[_ngcontent-%COMP%] { flex: 1; display: flex; min-height: 0; }\n\n.flow-stage[_ngcontent-%COMP%] {\n flex: 1;\n position: relative;\n overflow: hidden;\n background:\n radial-gradient(900px 520px at 72% -8%,\n color-mix(in srgb, var(--mj-brand-primary) 12%, var(--mj-bg-surface-sunken)) 0%,\n var(--mj-bg-surface-sunken) 60%);\n}\n.flow-stage[_ngcontent-%COMP%] mj-agent-flow-flame[_ngcontent-%COMP%], \n.flow-stage[_ngcontent-%COMP%] mj-agent-flow-subway[_ngcontent-%COMP%], \n.flow-stage[_ngcontent-%COMP%] mj-agent-flow-constellation[_ngcontent-%COMP%] {\n display: block;\n position: absolute;\n inset: 0;\n padding: 10px 14px;\n}\n.flow-stage[_ngcontent-%COMP%] mj-agent-flow-flowchart[_ngcontent-%COMP%] {\n display: block;\n position: absolute;\n inset: 0;\n}\n.flow-hidden[_ngcontent-%COMP%] { display: none !important; }\n\n\n\n.flow-zoom[_ngcontent-%COMP%] {\n position: absolute;\n top: 12px;\n right: 14px;\n z-index: 5;\n display: flex;\n gap: 6px;\n}\n.fz-btn[_ngcontent-%COMP%] {\n width: 34px;\n height: 34px;\n border-radius: 9px;\n border: 1px solid var(--mj-border-default);\n background: color-mix(in srgb, var(--mj-bg-surface-card) 88%, transparent);\n color: var(--mj-text-secondary);\n cursor: pointer;\n display: grid;\n place-items: center;\n font-size: 13px;\n backdrop-filter: blur(4px);\n}\n.fz-btn[_ngcontent-%COMP%]:hover { color: var(--mj-text-primary); border-color: var(--mj-brand-primary); }\n\n\n\n.flow-resizer[_ngcontent-%COMP%] {\n position: absolute;\n left: -3px;\n top: 0;\n width: 7px;\n height: 100%;\n cursor: col-resize;\n z-index: 6;\n}\n.flow-resizer[_ngcontent-%COMP%]:hover { background: color-mix(in srgb, var(--mj-brand-primary) 30%, transparent); }\n\n\n\n.flow-detail[_ngcontent-%COMP%] {\n position: relative;\n flex-shrink: 0;\n border-left: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface);\n overflow: hidden;\n display: flex;\n}\n\n\n\n.flow-detail[_ngcontent-%COMP%] > mj-ai-agent-run-step-detail[_ngcontent-%COMP%] { flex: 1 1 auto; min-width: 0; }\n\n.flow-overlay[_ngcontent-%COMP%] {\n position: absolute;\n inset: 0;\n z-index: 4;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n gap: 12px;\n background: color-mix(in srgb, var(--mj-bg-surface-sunken) 70%, transparent);\n}\n.flow-empty[_ngcontent-%COMP%] { color: var(--mj-text-muted); }\n.flow-empty[_ngcontent-%COMP%] i[_ngcontent-%COMP%] { font-size: 34px; opacity: 0.5; }\n\n\n\n.flow-rail[_ngcontent-%COMP%] {\n position: relative;\n flex-shrink: 0;\n border-left: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface);\n display: flex;\n flex-direction: column;\n min-height: 0;\n}\n.now[_ngcontent-%COMP%] { padding: 16px; }\n.rail-lbl[_ngcontent-%COMP%] {\n font-size: 10px;\n letter-spacing: 1.4px;\n text-transform: uppercase;\n color: var(--mj-text-muted);\n}\n.breadcrumb[_ngcontent-%COMP%] {\n display: flex;\n flex-wrap: wrap;\n gap: 4px;\n margin: 8px 0 12px;\n font-size: 11px;\n color: var(--mj-text-muted);\n}\n.breadcrumb[_ngcontent-%COMP%] .sep[_ngcontent-%COMP%] { opacity: 0.5; }\n.nowcard[_ngcontent-%COMP%] {\n border: 1px solid var(--mj-border-default);\n border-radius: 14px;\n padding: 16px;\n background: var(--mj-bg-surface-card);\n}\n.nowcard[_ngcontent-%COMP%] .ico[_ngcontent-%COMP%] { font-size: 26px; line-height: 1; }\n.nowcard[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] { margin: 8px 0 2px; font-size: 17px; color: var(--mj-text-primary); }\n.nowcard[_ngcontent-%COMP%] .type[_ngcontent-%COMP%] { font-size: 12px; font-weight: 600; color: var(--mj-text-secondary); }\n.nowcard[_ngcontent-%COMP%] .meta[_ngcontent-%COMP%] { display: flex; gap: 14px; margin-top: 12px; font-size: 12px; color: var(--mj-text-secondary); }\n.nowcard[_ngcontent-%COMP%] .meta[_ngcontent-%COMP%] b[_ngcontent-%COMP%] { display: block; color: var(--mj-text-primary); font-size: 15px; font-variant-numeric: tabular-nums; }\n.barbg[_ngcontent-%COMP%] { height: 6px; border-radius: 6px; background: var(--mj-border-default); margin-top: 14px; overflow: hidden; }\n.barfg[_ngcontent-%COMP%] {\n height: 100%;\n width: 0;\n background: linear-gradient(90deg, var(--mj-brand-primary), color-mix(in srgb, var(--mj-brand-primary) 40%, var(--mj-bg-surface)));\n}\n.log[_ngcontent-%COMP%] { flex: 1; overflow: auto; padding: 0 14px 16px; }\n.rail-lbl.sticky[_ngcontent-%COMP%] { position: sticky; top: 0; background: var(--mj-bg-surface); padding: 10px 0 8px; z-index: 1; }\n\n\n\n\n[_nghost-%COMP%] .flogitem {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 6px 9px;\n border-radius: 8px;\n margin-bottom: 3px;\n font-size: 11.5px;\n line-height: 1.25;\n border: 1px solid transparent;\n}\n[_nghost-%COMP%] .flogitem .flog-ico { flex: 0 0 auto; font-size: 11px; }\n[_nghost-%COMP%] .flogitem .flog-name {\n flex: 1 1 auto;\n min-width: 0;\n color: var(--mj-text-secondary);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n[_nghost-%COMP%] .flogitem .flog-dur {\n flex: 0 0 auto;\n color: var(--mj-text-muted);\n font-variant-numeric: tabular-nums;\n font-size: 10.5px;\n}\n[_nghost-%COMP%] .flogitem.heat {\n background: color-mix(in srgb, var(--mj-status-warning) 10%, transparent);\n border-color: color-mix(in srgb, var(--mj-status-warning) 35%, transparent);\n}\n[_nghost-%COMP%] .breadcrumb .sep { opacity: 0.5; margin: 0 1px; }\n\n\n\n[_nghost-%COMP%] .ftree-row {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 5px 8px;\n border-radius: 7px;\n margin-bottom: 1px;\n font-size: 11.5px;\n line-height: 1.25;\n cursor: pointer;\n border-left: 2px solid transparent;\n}\n[_nghost-%COMP%] .ftree-row:hover { background: var(--mj-bg-surface-hover); }\n[_nghost-%COMP%] .ftree-ico { flex: 0 0 14px; width: 14px; text-align: center; font-size: 11px; }\n[_nghost-%COMP%] .ftree-logo { flex: 0 0 14px; width: 14px; height: 14px; border-radius: 50%; object-fit: cover; }\n[_nghost-%COMP%] .ftree-name {\n flex: 1 1 auto; min-width: 0;\n overflow: hidden; text-overflow: ellipsis; white-space: nowrap;\n color: var(--mj-text-secondary);\n}\n[_nghost-%COMP%] .ftree-dur { flex: 0 0 auto; color: var(--mj-text-muted); font-size: 10.5px; font-variant-numeric: tabular-nums; }\n[_nghost-%COMP%] .ftree-row.ftree-pending { opacity: 0.5; }\n[_nghost-%COMP%] .ftree-row.ftree-active {\n background: color-mix(in srgb, var(--mj-brand-primary) 12%, transparent);\n border-left-color: var(--mj-brand-primary);\n}\n[_nghost-%COMP%] .ftree-row.ftree-active .ftree-name { color: var(--mj-text-primary); font-weight: 600; }\n[_nghost-%COMP%] .ftree-row.ftree-selected {\n background: var(--mj-bg-surface-hover);\n border-left-color: var(--mj-brand-primary);\n}\n[_nghost-%COMP%] .ftree-row.ftree-selected .ftree-name { color: var(--mj-text-primary); }\n\n\n\n.flow-transport[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 14px;\n padding: 12px 18px;\n border-top: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface);\n}\n.pbtn[_ngcontent-%COMP%] {\n width: 42px;\n height: 42px;\n border-radius: 50%;\n border: none;\n cursor: pointer;\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n font-size: 15px;\n box-shadow: 0 6px 16px color-mix(in srgb, var(--mj-brand-primary) 35%, transparent);\n transition: 0.15s;\n}\n.pbtn[_ngcontent-%COMP%]:hover:not(:disabled) { transform: translateY(-1px); }\n.pbtn[_ngcontent-%COMP%]:disabled, .ibtn[_ngcontent-%COMP%]:disabled { opacity: 0.45; cursor: not-allowed; }\n.ibtn[_ngcontent-%COMP%] {\n width: 38px;\n height: 38px;\n border-radius: 10px;\n border: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface-card);\n color: var(--mj-text-secondary);\n cursor: pointer;\n}\n.ibtn[_ngcontent-%COMP%]:hover:not(:disabled) { color: var(--mj-text-primary); border-color: var(--mj-brand-primary); }\n\ninput[type=range].scrub[_ngcontent-%COMP%], input[type=range].speed[_ngcontent-%COMP%] {\n -webkit-appearance: none;\n appearance: none;\n height: 6px;\n border-radius: 6px;\n background: var(--mj-border-default);\n outline: none;\n cursor: pointer;\n}\ninput[type=range].scrub[_ngcontent-%COMP%] { flex: 1; }\ninput[type=range].speed[_ngcontent-%COMP%] { width: 90px; }\ninput[type=range][_ngcontent-%COMP%]::-webkit-slider-thumb {\n -webkit-appearance: none;\n width: 16px;\n height: 16px;\n border-radius: 50%;\n background: var(--mj-bg-surface);\n border: 3px solid var(--mj-brand-primary);\n cursor: pointer;\n box-shadow: 0 0 8px color-mix(in srgb, var(--mj-brand-primary) 60%, transparent);\n}\ninput[type=range][_ngcontent-%COMP%]::-moz-range-thumb {\n width: 16px;\n height: 16px;\n border-radius: 50%;\n background: var(--mj-bg-surface);\n border: 3px solid var(--mj-brand-primary);\n cursor: pointer;\n}\n.clock[_ngcontent-%COMP%] {\n font-variant-numeric: tabular-nums;\n font-weight: 700;\n font-size: 14px;\n min-width: 116px;\n text-align: center;\n color: var(--mj-text-primary);\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: 9px;\n padding: 7px 10px;\n}\n.speedbox[_ngcontent-%COMP%] { display: flex; align-items: center; gap: 8px; color: var(--mj-text-muted); font-size: 12px; }\n.spdval[_ngcontent-%COMP%] { min-width: 34px; font-variant-numeric: tabular-nums; }\n\n\n\n.flow-legend[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 18px;\n border-top: 1px solid var(--mj-border-subtle);\n font-size: 11px;\n color: var(--mj-text-muted);\n}\n.flow-legend[_ngcontent-%COMP%] .lg[_ngcontent-%COMP%] { width: 10px; height: 10px; border-radius: 3px; display: inline-block; }\n.legend-note[_ngcontent-%COMP%] { color: var(--mj-text-muted); }"], changeDetection: 0 }); }
|
|
602
|
+
}
|
|
603
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(AIAgentRunFlowComponent, [{
|
|
604
|
+
type: Component,
|
|
605
|
+
args: [{ standalone: false, selector: 'mj-ai-agent-run-flow', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"flow-cockpit\">\n <!-- mode segmented control -->\n <div class=\"flow-modes\">\n @for (m of modes; track m.key) {\n <button class=\"flow-mode\" [class.on]=\"mode === m.key\" [class.soon]=\"!m.enabled\"\n [disabled]=\"!m.enabled\" (click)=\"selectMode(m)\"\n [title]=\"m.enabled ? m.label : m.label + ' \u2014 coming soon'\">\n <i class=\"fas\" [ngClass]=\"m.icon\"></i>\n <span>{{ m.label }}</span>\n @if (!m.enabled) { <span class=\"soon-tag\">Soon</span> }\n </button>\n }\n </div>\n\n <div class=\"flow-main\">\n <!-- stage -->\n <div class=\"flow-stage\">\n @if (loading) {\n <div class=\"flow-overlay\"><mj-loading text=\"Building flow\u2026\"></mj-loading></div>\n } @else if (!hasData) {\n <div class=\"flow-overlay flow-empty\">\n <i class=\"fas fa-wind\"></i>\n <p>No steps recorded for this run yet.</p>\n </div>\n }\n\n <mj-agent-flow-flame [class.flow-hidden]=\"mode !== 'flame'\" [Model]=\"model\" (nodeSelected)=\"selectStep($event)\"></mj-agent-flow-flame>\n <mj-agent-flow-subway [class.flow-hidden]=\"mode !== 'subway'\" [Model]=\"model\" (nodeSelected)=\"selectStep($event)\"></mj-agent-flow-subway>\n <mj-agent-flow-constellation [class.flow-hidden]=\"mode !== 'constellation'\" [Model]=\"model\" (nodeSelected)=\"selectStep($event)\"></mj-agent-flow-constellation>\n <mj-agent-flow-flowchart [class.flow-hidden]=\"mode !== 'flow'\" [Model]=\"model\"\n (nodeSelected)=\"selectStep($event)\"\n (selectionCleared)=\"closeDetail()\"></mj-agent-flow-flowchart>\n\n @if (hasData) {\n <div class=\"flow-zoom\">\n <button class=\"fz-btn\" (click)=\"zoomIn()\" title=\"Zoom in\"><i class=\"fas fa-magnifying-glass-plus\"></i></button>\n <button class=\"fz-btn\" (click)=\"zoomOut()\" title=\"Zoom out\"><i class=\"fas fa-magnifying-glass-minus\"></i></button>\n <button class=\"fz-btn\" (click)=\"fitReset()\" title=\"Fit to view\"><i class=\"fas fa-expand\"></i></button>\n </div>\n }\n </div>\n\n <!-- narration rail (animated modes, nothing selected) -->\n @if (showRail) {\n <aside class=\"flow-rail\" [style.width.px]=\"panelWidth\">\n <div class=\"flow-resizer\" (mousedown)=\"startResize($event)\" title=\"Drag to resize\"></div>\n <div class=\"now\">\n <div class=\"rail-lbl\">Now executing</div>\n <div class=\"breadcrumb\" #crumb></div>\n <div class=\"nowcard\">\n <div class=\"ico\" #nowIco>\uD83E\uDD16</div>\n <h3 #nowName>\u2014</h3>\n <div class=\"type\" #nowType>Agent run</div>\n <div class=\"meta\">\n <div>Duration<b #nowDur>\u2014</b></div>\n <div>Status<b #nowStat>\u2014</b></div>\n <div>Model<b #nowModel>\u2014</b></div>\n </div>\n <div class=\"barbg\"><div class=\"barfg\" #nowBar></div></div>\n </div>\n </div>\n <div class=\"log\">\n <div class=\"rail-lbl sticky\">Execution log</div>\n <div #loglist class=\"loglist\"></div>\n </div>\n </aside>\n }\n\n <!-- step inspector (any mode) -->\n @if (selectedStepItem) {\n <aside class=\"flow-detail\" [style.width.px]=\"panelWidth\">\n <div class=\"flow-resizer\" (mousedown)=\"startResize($event)\" title=\"Drag to resize\"></div>\n <mj-ai-agent-run-step-detail\n [selectedTimelineItem]=\"selectedStepItem\"\n (closePanel)=\"closeDetail()\"\n (navigateToActionLog)=\"onDetailNavigateActionLog($event)\"\n (copyToClipboard)=\"onDetailCopy($event)\">\n </mj-ai-agent-run-step-detail>\n </aside>\n }\n </div>\n\n <!-- transport (animated modes only) -->\n @if (isAnimated) {\n <div class=\"flow-transport\">\n <button class=\"pbtn\" (click)=\"togglePlay()\" [disabled]=\"!hasData\" [title]=\"playing ? 'Pause' : 'Play'\">\n <i class=\"fas\" [ngClass]=\"playing ? 'fa-pause' : 'fa-play'\"></i>\n </button>\n <button class=\"ibtn\" (click)=\"restart()\" [disabled]=\"!hasData\" title=\"Restart\">\n <i class=\"fas fa-rotate-left\"></i>\n </button>\n <input #scrub class=\"scrub\" type=\"range\" min=\"0\" max=\"1000\" value=\"0\"\n [disabled]=\"!hasData\" (input)=\"onScrub(scrub.value)\"/>\n <div class=\"clock\" #clock>0s / 0s</div>\n <div class=\"speedbox\">\n <i class=\"fas fa-gauge-high\"></i>\n <input class=\"speed\" type=\"range\" min=\"25\" max=\"300\" value=\"100\" (input)=\"onSpeed($any($event.target).value)\"/>\n <span class=\"spdval\">{{ speed.toFixed(1) }}\u00D7</span>\n </div>\n </div>\n }\n\n <!-- legend / hint -->\n <div class=\"flow-legend\">\n @if (isAnimated) {\n <span><i class=\"lg\" style=\"background: var(--mj-text-muted)\"></i>Hint:</span>\n <span class=\"legend-note\">Playback is compressed so every step is visible \u2014 real duration shows through heat, size & speed, not literal width.</span>\n } @else {\n <span><i class=\"lg\" style=\"background: var(--mj-text-muted)\"></i>Tip:</span>\n <span class=\"legend-note\">Drag to pan, scroll to zoom, click any node to inspect it. Layout is the full execution tree, top to bottom.</span>\n }\n </div>\n</div>\n", styles: [":host { display: block; height: 100%; }\n\n.flow-cockpit {\n display: flex;\n flex-direction: column;\n height: 100%;\n background: var(--mj-bg-surface);\n color: var(--mj-text-primary);\n}\n\n/* ---------------- mode segmented control ---------------- */\n.flow-modes {\n display: flex;\n gap: 6px;\n padding: 10px 14px;\n flex-wrap: wrap;\n border-bottom: 1px solid var(--mj-border-subtle);\n}\n.flow-mode {\n display: inline-flex;\n align-items: center;\n gap: 8px;\n padding: 7px 14px;\n border: 1px solid var(--mj-border-default);\n border-radius: 999px;\n background: var(--mj-bg-surface-card);\n color: var(--mj-text-secondary);\n font-weight: 600;\n font-size: 12.5px;\n cursor: pointer;\n transition: 0.15s;\n}\n.flow-mode:hover:not(:disabled) { color: var(--mj-text-primary); border-color: var(--mj-brand-primary); }\n.flow-mode.on {\n color: var(--mj-text-inverse);\n background: var(--mj-brand-primary);\n border-color: var(--mj-brand-primary);\n box-shadow: 0 0 14px color-mix(in srgb, var(--mj-brand-primary) 35%, transparent);\n}\n.flow-mode.soon { cursor: not-allowed; opacity: 0.6; }\n.soon-tag {\n font-size: 9px;\n font-weight: 700;\n letter-spacing: 0.5px;\n text-transform: uppercase;\n padding: 2px 6px;\n border-radius: 6px;\n background: color-mix(in srgb, var(--mj-text-muted) 20%, transparent);\n color: var(--mj-text-muted);\n}\n\n/* ---------------- main: stage + rail ---------------- */\n.flow-main { flex: 1; display: flex; min-height: 0; }\n\n.flow-stage {\n flex: 1;\n position: relative;\n overflow: hidden;\n background:\n radial-gradient(900px 520px at 72% -8%,\n color-mix(in srgb, var(--mj-brand-primary) 12%, var(--mj-bg-surface-sunken)) 0%,\n var(--mj-bg-surface-sunken) 60%);\n}\n.flow-stage mj-agent-flow-flame,\n.flow-stage mj-agent-flow-subway,\n.flow-stage mj-agent-flow-constellation {\n display: block;\n position: absolute;\n inset: 0;\n padding: 10px 14px;\n}\n.flow-stage mj-agent-flow-flowchart {\n display: block;\n position: absolute;\n inset: 0;\n}\n.flow-hidden { display: none !important; }\n\n/* shared zoom toolbar (all modes) */\n.flow-zoom {\n position: absolute;\n top: 12px;\n right: 14px;\n z-index: 5;\n display: flex;\n gap: 6px;\n}\n.fz-btn {\n width: 34px;\n height: 34px;\n border-radius: 9px;\n border: 1px solid var(--mj-border-default);\n background: color-mix(in srgb, var(--mj-bg-surface-card) 88%, transparent);\n color: var(--mj-text-secondary);\n cursor: pointer;\n display: grid;\n place-items: center;\n font-size: 13px;\n backdrop-filter: blur(4px);\n}\n.fz-btn:hover { color: var(--mj-text-primary); border-color: var(--mj-brand-primary); }\n\n/* draggable resize handle on the left edge of the right panel */\n.flow-resizer {\n position: absolute;\n left: -3px;\n top: 0;\n width: 7px;\n height: 100%;\n cursor: col-resize;\n z-index: 6;\n}\n.flow-resizer:hover { background: color-mix(in srgb, var(--mj-brand-primary) 30%, transparent); }\n\n/* step inspector (Flow / static mode) */\n.flow-detail {\n position: relative;\n flex-shrink: 0;\n border-left: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface);\n overflow: hidden;\n display: flex;\n}\n/* size only the content child \u2014 NOT the absolutely-positioned resize handle,\n which a universal `> *` selector would balloon to full width and trap clicks */\n.flow-detail > mj-ai-agent-run-step-detail { flex: 1 1 auto; min-width: 0; }\n\n.flow-overlay {\n position: absolute;\n inset: 0;\n z-index: 4;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n gap: 12px;\n background: color-mix(in srgb, var(--mj-bg-surface-sunken) 70%, transparent);\n}\n.flow-empty { color: var(--mj-text-muted); }\n.flow-empty i { font-size: 34px; opacity: 0.5; }\n\n/* ---------------- narration rail ---------------- */\n.flow-rail {\n position: relative;\n flex-shrink: 0;\n border-left: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface);\n display: flex;\n flex-direction: column;\n min-height: 0;\n}\n.now { padding: 16px; }\n.rail-lbl {\n font-size: 10px;\n letter-spacing: 1.4px;\n text-transform: uppercase;\n color: var(--mj-text-muted);\n}\n.breadcrumb {\n display: flex;\n flex-wrap: wrap;\n gap: 4px;\n margin: 8px 0 12px;\n font-size: 11px;\n color: var(--mj-text-muted);\n}\n.breadcrumb .sep { opacity: 0.5; }\n.nowcard {\n border: 1px solid var(--mj-border-default);\n border-radius: 14px;\n padding: 16px;\n background: var(--mj-bg-surface-card);\n}\n.nowcard .ico { font-size: 26px; line-height: 1; }\n.nowcard h3 { margin: 8px 0 2px; font-size: 17px; color: var(--mj-text-primary); }\n.nowcard .type { font-size: 12px; font-weight: 600; color: var(--mj-text-secondary); }\n.nowcard .meta { display: flex; gap: 14px; margin-top: 12px; font-size: 12px; color: var(--mj-text-secondary); }\n.nowcard .meta b { display: block; color: var(--mj-text-primary); font-size: 15px; font-variant-numeric: tabular-nums; }\n.barbg { height: 6px; border-radius: 6px; background: var(--mj-border-default); margin-top: 14px; overflow: hidden; }\n.barfg {\n height: 100%;\n width: 0;\n background: linear-gradient(90deg, var(--mj-brand-primary), color-mix(in srgb, var(--mj-brand-primary) 40%, var(--mj-bg-surface)));\n}\n.log { flex: 1; overflow: auto; padding: 0 14px 16px; }\n.rail-lbl.sticky { position: sticky; top: 0; background: var(--mj-bg-surface); padding: 10px 0 8px; z-index: 1; }\n\n/* Log rows are injected via innerHTML (no Angular encapsulation attribute),\n so these must pierce emulated encapsulation with ::ng-deep. */\n:host ::ng-deep .flogitem {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 6px 9px;\n border-radius: 8px;\n margin-bottom: 3px;\n font-size: 11.5px;\n line-height: 1.25;\n border: 1px solid transparent;\n}\n:host ::ng-deep .flogitem .flog-ico { flex: 0 0 auto; font-size: 11px; }\n:host ::ng-deep .flogitem .flog-name {\n flex: 1 1 auto;\n min-width: 0;\n color: var(--mj-text-secondary);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n:host ::ng-deep .flogitem .flog-dur {\n flex: 0 0 auto;\n color: var(--mj-text-muted);\n font-variant-numeric: tabular-nums;\n font-size: 10.5px;\n}\n:host ::ng-deep .flogitem.heat {\n background: color-mix(in srgb, var(--mj-status-warning) 10%, transparent);\n border-color: color-mix(in srgb, var(--mj-status-warning) 35%, transparent);\n}\n:host ::ng-deep .breadcrumb .sep { opacity: 0.5; margin: 0 1px; }\n\n/* clickable indented log tree (rows injected via innerHTML) */\n:host ::ng-deep .ftree-row {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 5px 8px;\n border-radius: 7px;\n margin-bottom: 1px;\n font-size: 11.5px;\n line-height: 1.25;\n cursor: pointer;\n border-left: 2px solid transparent;\n}\n:host ::ng-deep .ftree-row:hover { background: var(--mj-bg-surface-hover); }\n:host ::ng-deep .ftree-ico { flex: 0 0 14px; width: 14px; text-align: center; font-size: 11px; }\n:host ::ng-deep .ftree-logo { flex: 0 0 14px; width: 14px; height: 14px; border-radius: 50%; object-fit: cover; }\n:host ::ng-deep .ftree-name {\n flex: 1 1 auto; min-width: 0;\n overflow: hidden; text-overflow: ellipsis; white-space: nowrap;\n color: var(--mj-text-secondary);\n}\n:host ::ng-deep .ftree-dur { flex: 0 0 auto; color: var(--mj-text-muted); font-size: 10.5px; font-variant-numeric: tabular-nums; }\n:host ::ng-deep .ftree-row.ftree-pending { opacity: 0.5; }\n:host ::ng-deep .ftree-row.ftree-active {\n background: color-mix(in srgb, var(--mj-brand-primary) 12%, transparent);\n border-left-color: var(--mj-brand-primary);\n}\n:host ::ng-deep .ftree-row.ftree-active .ftree-name { color: var(--mj-text-primary); font-weight: 600; }\n:host ::ng-deep .ftree-row.ftree-selected {\n background: var(--mj-bg-surface-hover);\n border-left-color: var(--mj-brand-primary);\n}\n:host ::ng-deep .ftree-row.ftree-selected .ftree-name { color: var(--mj-text-primary); }\n\n/* ---------------- transport ---------------- */\n.flow-transport {\n display: flex;\n align-items: center;\n gap: 14px;\n padding: 12px 18px;\n border-top: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface);\n}\n.pbtn {\n width: 42px;\n height: 42px;\n border-radius: 50%;\n border: none;\n cursor: pointer;\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n font-size: 15px;\n box-shadow: 0 6px 16px color-mix(in srgb, var(--mj-brand-primary) 35%, transparent);\n transition: 0.15s;\n}\n.pbtn:hover:not(:disabled) { transform: translateY(-1px); }\n.pbtn:disabled, .ibtn:disabled { opacity: 0.45; cursor: not-allowed; }\n.ibtn {\n width: 38px;\n height: 38px;\n border-radius: 10px;\n border: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface-card);\n color: var(--mj-text-secondary);\n cursor: pointer;\n}\n.ibtn:hover:not(:disabled) { color: var(--mj-text-primary); border-color: var(--mj-brand-primary); }\n\ninput[type=range].scrub, input[type=range].speed {\n -webkit-appearance: none;\n appearance: none;\n height: 6px;\n border-radius: 6px;\n background: var(--mj-border-default);\n outline: none;\n cursor: pointer;\n}\ninput[type=range].scrub { flex: 1; }\ninput[type=range].speed { width: 90px; }\ninput[type=range]::-webkit-slider-thumb {\n -webkit-appearance: none;\n width: 16px;\n height: 16px;\n border-radius: 50%;\n background: var(--mj-bg-surface);\n border: 3px solid var(--mj-brand-primary);\n cursor: pointer;\n box-shadow: 0 0 8px color-mix(in srgb, var(--mj-brand-primary) 60%, transparent);\n}\ninput[type=range]::-moz-range-thumb {\n width: 16px;\n height: 16px;\n border-radius: 50%;\n background: var(--mj-bg-surface);\n border: 3px solid var(--mj-brand-primary);\n cursor: pointer;\n}\n.clock {\n font-variant-numeric: tabular-nums;\n font-weight: 700;\n font-size: 14px;\n min-width: 116px;\n text-align: center;\n color: var(--mj-text-primary);\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: 9px;\n padding: 7px 10px;\n}\n.speedbox { display: flex; align-items: center; gap: 8px; color: var(--mj-text-muted); font-size: 12px; }\n.spdval { min-width: 34px; font-variant-numeric: tabular-nums; }\n\n/* ---------------- legend ---------------- */\n.flow-legend {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 18px;\n border-top: 1px solid var(--mj-border-subtle);\n font-size: 11px;\n color: var(--mj-text-muted);\n}\n.flow-legend .lg { width: 10px; height: 10px; border-radius: 3px; display: inline-block; }\n.legend-note { color: var(--mj-text-muted); }\n"] }]
|
|
606
|
+
}], null, { aiAgentRunId: [{
|
|
607
|
+
type: Input
|
|
608
|
+
}], dataHelper: [{
|
|
609
|
+
type: Input
|
|
610
|
+
}], agentName: [{
|
|
611
|
+
type: Input
|
|
612
|
+
}], runStatus: [{
|
|
613
|
+
type: Input
|
|
614
|
+
}], agentIconClass: [{
|
|
615
|
+
type: Input
|
|
616
|
+
}], agentLogoUrl: [{
|
|
617
|
+
type: Input
|
|
618
|
+
}], flame: [{
|
|
619
|
+
type: ViewChild,
|
|
620
|
+
args: [FlameCascadeComponent]
|
|
621
|
+
}], subway: [{
|
|
622
|
+
type: ViewChild,
|
|
623
|
+
args: [SubwayLinesComponent]
|
|
624
|
+
}], constellation: [{
|
|
625
|
+
type: ViewChild,
|
|
626
|
+
args: [ConstellationComponent]
|
|
627
|
+
}], flowchart: [{
|
|
628
|
+
type: ViewChild,
|
|
629
|
+
args: [FlowchartComponent]
|
|
630
|
+
}], scrubRef: [{
|
|
631
|
+
type: ViewChild,
|
|
632
|
+
args: ['scrub']
|
|
633
|
+
}], clockRef: [{
|
|
634
|
+
type: ViewChild,
|
|
635
|
+
args: ['clock']
|
|
636
|
+
}], crumbRef: [{
|
|
637
|
+
type: ViewChild,
|
|
638
|
+
args: ['crumb']
|
|
639
|
+
}], nowIcoRef: [{
|
|
640
|
+
type: ViewChild,
|
|
641
|
+
args: ['nowIco']
|
|
642
|
+
}], nowNameRef: [{
|
|
643
|
+
type: ViewChild,
|
|
644
|
+
args: ['nowName']
|
|
645
|
+
}], nowTypeRef: [{
|
|
646
|
+
type: ViewChild,
|
|
647
|
+
args: ['nowType']
|
|
648
|
+
}], nowDurRef: [{
|
|
649
|
+
type: ViewChild,
|
|
650
|
+
args: ['nowDur']
|
|
651
|
+
}], nowModelRef: [{
|
|
652
|
+
type: ViewChild,
|
|
653
|
+
args: ['nowModel']
|
|
654
|
+
}], nowStatRef: [{
|
|
655
|
+
type: ViewChild,
|
|
656
|
+
args: ['nowStat']
|
|
657
|
+
}], nowBarRef: [{
|
|
658
|
+
type: ViewChild,
|
|
659
|
+
args: ['nowBar']
|
|
660
|
+
}], loglistRef: [{
|
|
661
|
+
type: ViewChild,
|
|
662
|
+
args: ['loglist']
|
|
663
|
+
}] }); })();
|
|
664
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(AIAgentRunFlowComponent, { className: "AIAgentRunFlowComponent", filePath: "src/lib/custom/ai-agent-run/flow/agent-run-flow.component.ts", lineNumber: 40 }); })();
|
|
665
|
+
//# sourceMappingURL=agent-run-flow.component.js.map
|