@memberjunction/ng-core-entity-forms 6.1.4 → 6.2.0-edge.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +22 -0
- package/dist/lib/custom/AIAgentCategories/ai-agent-category-overview.panel.d.ts +1 -1
- package/dist/lib/custom/AIAgentCategories/ai-agent-category-overview.panel.js +2 -2
- package/dist/lib/custom/AIAgentCategories/ai-agent-category-overview.panel.js.map +1 -1
- package/dist/lib/custom/AIAgentSessions/ai-agent-session-form.component.js.map +1 -1
- package/dist/lib/custom/AIAgents/add-action-dialog.component.d.ts +90 -16
- package/dist/lib/custom/AIAgents/add-action-dialog.component.d.ts.map +1 -1
- package/dist/lib/custom/AIAgents/add-action-dialog.component.js +218 -70
- package/dist/lib/custom/AIAgents/add-action-dialog.component.js.map +1 -1
- package/dist/lib/custom/AIAgents/agent-prompt-advanced-settings-dialog.component.d.ts +80 -16
- 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 +146 -46
- 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 +329 -27
- package/dist/lib/custom/AIAgents/ai-agent-form.component.d.ts.map +1 -1
- package/dist/lib/custom/AIAgents/ai-agent-form.component.js +794 -262
- package/dist/lib/custom/AIAgents/ai-agent-form.component.js.map +1 -1
- package/dist/lib/custom/AIAgents/ai-agent-management.service.d.ts +76 -0
- package/dist/lib/custom/AIAgents/ai-agent-management.service.d.ts.map +1 -1
- package/dist/lib/custom/AIAgents/ai-agent-management.service.js +77 -33
- package/dist/lib/custom/AIAgents/ai-agent-management.service.js.map +1 -1
- package/dist/lib/custom/AIAgents/create-prompt-dialog.component.d.ts +69 -15
- package/dist/lib/custom/AIAgents/create-prompt-dialog.component.d.ts.map +1 -1
- package/dist/lib/custom/AIAgents/create-prompt-dialog.component.js +182 -74
- 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 +105 -25
- 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 +272 -112
- 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 +32 -6
- package/dist/lib/custom/AIAgents/new-agent-dialog.component.d.ts.map +1 -1
- package/dist/lib/custom/AIAgents/new-agent-dialog.component.js +71 -19
- package/dist/lib/custom/AIAgents/new-agent-dialog.component.js.map +1 -1
- package/dist/lib/custom/AIAgents/new-agent-dialog.service.d.ts +10 -0
- package/dist/lib/custom/AIAgents/new-agent-dialog.service.d.ts.map +1 -1
- package/dist/lib/custom/AIAgents/new-agent-dialog.service.js +27 -7
- package/dist/lib/custom/AIAgents/new-agent-dialog.service.js.map +1 -1
- package/dist/lib/custom/AIAgents/prompt-selector-dialog.component.d.ts +65 -15
- package/dist/lib/custom/AIAgents/prompt-selector-dialog.component.d.ts.map +1 -1
- package/dist/lib/custom/AIAgents/prompt-selector-dialog.component.js +152 -52
- 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 +81 -15
- 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 +145 -45
- 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 +71 -17
- 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 +175 -67
- 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 +173 -27
- 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 +385 -93
- package/dist/lib/custom/AIPromptRuns/ai-prompt-run-form.component.js.map +1 -1
- package/dist/lib/custom/AIPromptRuns/chat-message-viewer.component.d.ts +64 -4
- package/dist/lib/custom/AIPromptRuns/chat-message-viewer.component.d.ts.map +1 -1
- package/dist/lib/custom/AIPromptRuns/chat-message-viewer.component.js +129 -29
- package/dist/lib/custom/AIPromptRuns/chat-message-viewer.component.js.map +1 -1
- package/dist/lib/custom/AIPrompts/ai-prompt-form.component.d.ts +260 -27
- package/dist/lib/custom/AIPrompts/ai-prompt-form.component.d.ts.map +1 -1
- package/dist/lib/custom/AIPrompts/ai-prompt-form.component.js +686 -238
- package/dist/lib/custom/AIPrompts/ai-prompt-form.component.js.map +1 -1
- package/dist/lib/custom/AIPrompts/ai-prompt-management.service.d.ts +10 -0
- package/dist/lib/custom/AIPrompts/ai-prompt-management.service.d.ts.map +1 -1
- package/dist/lib/custom/AIPrompts/ai-prompt-management.service.js +17 -9
- package/dist/lib/custom/AIPrompts/ai-prompt-management.service.js.map +1 -1
- package/dist/lib/custom/AIPrompts/template-selector-dialog.component.d.ts +74 -16
- package/dist/lib/custom/AIPrompts/template-selector-dialog.component.d.ts.map +1 -1
- package/dist/lib/custom/AIPrompts/template-selector-dialog.component.js +174 -58
- package/dist/lib/custom/AIPrompts/template-selector-dialog.component.js.map +1 -1
- package/dist/lib/custom/Actions/action-execution-log-form.component.d.ts +108 -14
- package/dist/lib/custom/Actions/action-execution-log-form.component.d.ts.map +1 -1
- package/dist/lib/custom/Actions/action-execution-log-form.component.js +258 -70
- package/dist/lib/custom/Actions/action-execution-log-form.component.js.map +1 -1
- package/dist/lib/custom/Actions/action-form.component.d.ts +198 -14
- package/dist/lib/custom/Actions/action-form.component.d.ts.map +1 -1
- package/dist/lib/custom/Actions/action-form.component.js +387 -107
- package/dist/lib/custom/Actions/action-form.component.js.map +1 -1
- package/dist/lib/custom/BridgeProviders/bridge-provider-features.d.ts +12 -6
- package/dist/lib/custom/BridgeProviders/bridge-provider-features.d.ts.map +1 -1
- package/dist/lib/custom/BridgeProviders/bridge-provider-features.js +41 -29
- package/dist/lib/custom/BridgeProviders/bridge-provider-features.js.map +1 -1
- package/dist/lib/custom/BridgeProviders/bridge-provider-form.component.js +14 -14
- package/dist/lib/custom/BridgeProviders/bridge-provider-form.component.js.map +1 -1
- package/dist/lib/custom/Companies/company-overview.panel.d.ts +1 -1
- package/dist/lib/custom/Companies/company-overview.panel.js +2 -2
- package/dist/lib/custom/Companies/company-overview.panel.js.map +1 -1
- package/dist/lib/custom/Conversations/conversation-overview.panel.d.ts +1 -1
- package/dist/lib/custom/Conversations/conversation-overview.panel.js +2 -2
- package/dist/lib/custom/Conversations/conversation-overview.panel.js.map +1 -1
- package/dist/lib/custom/Employees/employee-overview.panel.d.ts +1 -1
- package/dist/lib/custom/Employees/employee-overview.panel.js +2 -2
- package/dist/lib/custom/Employees/employee-overview.panel.js.map +1 -1
- package/dist/lib/custom/Entities/entity-form.component.d.ts +209 -28
- package/dist/lib/custom/Entities/entity-form.component.d.ts.map +1 -1
- package/dist/lib/custom/Entities/entity-form.component.js +494 -138
- package/dist/lib/custom/Entities/entity-form.component.js.map +1 -1
- package/dist/lib/custom/EntityActions/entityaction.form.component.d.ts +5 -1
- package/dist/lib/custom/EntityActions/entityaction.form.component.d.ts.map +1 -1
- package/dist/lib/custom/EntityActions/entityaction.form.component.js +10 -2
- package/dist/lib/custom/EntityActions/entityaction.form.component.js.map +1 -1
- package/dist/lib/custom/Files/file-form.component.d.ts +1 -1
- package/dist/lib/custom/Files/file-form.component.js +2 -2
- package/dist/lib/custom/Files/file-form.component.js.map +1 -1
- package/dist/lib/custom/Lists/list-form.component.d.ts +300 -36
- package/dist/lib/custom/Lists/list-form.component.d.ts.map +1 -1
- package/dist/lib/custom/Lists/list-form.component.js +664 -208
- package/dist/lib/custom/Lists/list-form.component.js.map +1 -1
- package/dist/lib/custom/MLModels/ml-model-form.component.d.ts +27 -0
- package/dist/lib/custom/MLModels/ml-model-form.component.d.ts.map +1 -0
- package/dist/lib/custom/MLModels/ml-model-form.component.js +193 -0
- package/dist/lib/custom/MLModels/ml-model-form.component.js.map +1 -0
- package/dist/lib/custom/MLModels/ml-model-view-models.d.ts +75 -0
- package/dist/lib/custom/MLModels/ml-model-view-models.d.ts.map +1 -0
- package/dist/lib/custom/MLModels/ml-model-view-models.js +244 -0
- package/dist/lib/custom/MLModels/ml-model-view-models.js.map +1 -0
- package/dist/lib/custom/MLModels/ps-model-detail.component.d.ts +173 -0
- package/dist/lib/custom/MLModels/ps-model-detail.component.d.ts.map +1 -0
- package/dist/lib/custom/MLModels/ps-model-detail.component.js +883 -0
- package/dist/lib/custom/MLModels/ps-model-detail.component.js.map +1 -0
- package/dist/lib/custom/Queries/query-form.component.d.ts +201 -26
- package/dist/lib/custom/Queries/query-form.component.d.ts.map +1 -1
- package/dist/lib/custom/Queries/query-form.component.js +429 -109
- package/dist/lib/custom/Queries/query-form.component.js.map +1 -1
- package/dist/lib/custom/Queries/query-run-dialog.component.d.ts +107 -14
- package/dist/lib/custom/Queries/query-run-dialog.component.d.ts.map +1 -1
- package/dist/lib/custom/Queries/query-run-dialog.component.js +249 -79
- package/dist/lib/custom/Queries/query-run-dialog.component.js.map +1 -1
- package/dist/lib/custom/RecordProcesses/record-process-form.component.d.ts +133 -7
- package/dist/lib/custom/RecordProcesses/record-process-form.component.d.ts.map +1 -1
- package/dist/lib/custom/RecordProcesses/record-process-form.component.js +1268 -19
- package/dist/lib/custom/RecordProcesses/record-process-form.component.js.map +1 -1
- package/dist/lib/custom/SearchScopes/searchscope-form.component.d.ts +1 -1
- package/dist/lib/custom/SearchScopes/searchscope-form.component.js +4 -4
- package/dist/lib/custom/SearchScopes/searchscope-form.component.js.map +1 -1
- package/dist/lib/custom/SessionBridges/session-bridge-form.component.js.map +1 -1
- package/dist/lib/custom/Templates/template-param-dialog.component.d.ts +77 -13
- package/dist/lib/custom/Templates/template-param-dialog.component.d.ts.map +1 -1
- package/dist/lib/custom/Templates/template-param-dialog.component.js +196 -78
- package/dist/lib/custom/Templates/template-param-dialog.component.js.map +1 -1
- package/dist/lib/custom/Templates/template-params-grid.component.d.ts +49 -7
- package/dist/lib/custom/Templates/template-params-grid.component.d.ts.map +1 -1
- package/dist/lib/custom/Templates/template-params-grid.component.js +132 -44
- package/dist/lib/custom/Templates/template-params-grid.component.js.map +1 -1
- package/dist/lib/custom/Templates/templates-form.component.d.ts +142 -17
- package/dist/lib/custom/Templates/templates-form.component.d.ts.map +1 -1
- package/dist/lib/custom/Templates/templates-form.component.js +333 -113
- package/dist/lib/custom/Templates/templates-form.component.js.map +1 -1
- package/dist/lib/custom/Tests/entity-link-pill.component.d.ts +24 -4
- package/dist/lib/custom/Tests/entity-link-pill.component.d.ts.map +1 -1
- package/dist/lib/custom/Tests/entity-link-pill.component.js +64 -20
- package/dist/lib/custom/Tests/entity-link-pill.component.js.map +1 -1
- package/dist/lib/custom/Tests/test-form.component.d.ts +217 -27
- package/dist/lib/custom/Tests/test-form.component.d.ts.map +1 -1
- package/dist/lib/custom/Tests/test-form.component.js +549 -169
- package/dist/lib/custom/Tests/test-form.component.js.map +1 -1
- package/dist/lib/custom/Tests/test-run-checks.d.ts +2 -0
- package/dist/lib/custom/Tests/test-run-checks.d.ts.map +1 -1
- package/dist/lib/custom/Tests/test-run-checks.js +5 -1
- package/dist/lib/custom/Tests/test-run-checks.js.map +1 -1
- package/dist/lib/custom/Tests/test-run-feedback-form.component.d.ts +2 -0
- package/dist/lib/custom/Tests/test-run-feedback-form.component.d.ts.map +1 -1
- package/dist/lib/custom/Tests/test-run-feedback-form.component.js +5 -1
- package/dist/lib/custom/Tests/test-run-feedback-form.component.js.map +1 -1
- package/dist/lib/custom/Tests/test-run-form.component.d.ts +146 -18
- package/dist/lib/custom/Tests/test-run-form.component.d.ts.map +1 -1
- package/dist/lib/custom/Tests/test-run-form.component.js +362 -106
- package/dist/lib/custom/Tests/test-run-form.component.js.map +1 -1
- package/dist/lib/custom/Tests/test-suite-form.component.d.ts +390 -47
- package/dist/lib/custom/Tests/test-suite-form.component.d.ts.map +1 -1
- package/dist/lib/custom/Tests/test-suite-form.component.js +1015 -343
- package/dist/lib/custom/Tests/test-suite-form.component.js.map +1 -1
- package/dist/lib/custom/Tests/test-suite-run-form.component.d.ts +214 -26
- package/dist/lib/custom/Tests/test-suite-run-form.component.d.ts.map +1 -1
- package/dist/lib/custom/Tests/test-suite-run-form.component.js +535 -159
- package/dist/lib/custom/Tests/test-suite-run-form.component.js.map +1 -1
- package/dist/lib/custom/Users/user-overview.panel.d.ts +1 -1
- package/dist/lib/custom/Users/user-overview.panel.js +2 -2
- package/dist/lib/custom/Users/user-overview.panel.js.map +1 -1
- package/dist/lib/custom/ai-agent-run/ai-agent-run-analytics.component.d.ts +208 -29
- package/dist/lib/custom/ai-agent-run/ai-agent-run-analytics.component.d.ts.map +1 -1
- package/dist/lib/custom/ai-agent-run/ai-agent-run-analytics.component.js +446 -138
- 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-cost.service.d.ts +6 -0
- package/dist/lib/custom/ai-agent-run/ai-agent-run-cost.service.d.ts.map +1 -1
- package/dist/lib/custom/ai-agent-run/ai-agent-run-cost.service.js +16 -4
- package/dist/lib/custom/ai-agent-run/ai-agent-run-cost.service.js.map +1 -1
- package/dist/lib/custom/ai-agent-run/ai-agent-run-data.service.d.ts +50 -6
- 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 +84 -12
- 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-step-detail.component.d.ts +89 -5
- package/dist/lib/custom/ai-agent-run/ai-agent-run-step-detail.component.d.ts.map +1 -1
- package/dist/lib/custom/ai-agent-run/ai-agent-run-step-detail.component.js +216 -70
- 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-step-node.component.d.ts +62 -3
- package/dist/lib/custom/ai-agent-run/ai-agent-run-step-node.component.d.ts.map +1 -1
- package/dist/lib/custom/ai-agent-run/ai-agent-run-step-node.component.js +140 -42
- package/dist/lib/custom/ai-agent-run/ai-agent-run-step-node.component.js.map +1 -1
- package/dist/lib/custom/ai-agent-run/ai-agent-run-timeline.component.d.ts +81 -10
- 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 +165 -37
- 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 +121 -14
- 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 +287 -79
- 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 +101 -15
- package/dist/lib/custom/ai-agent-run/flow/agent-run-flow.component.d.ts.map +1 -1
- package/dist/lib/custom/ai-agent-run/flow/agent-run-flow.component.js +281 -97
- package/dist/lib/custom/ai-agent-run/flow/agent-run-flow.component.js.map +1 -1
- package/dist/lib/custom/ai-agent-run/flow/agent-run-flow.model.d.ts +43 -25
- package/dist/lib/custom/ai-agent-run/flow/agent-run-flow.model.d.ts.map +1 -1
- package/dist/lib/custom/ai-agent-run/flow/agent-run-flow.model.js +100 -64
- package/dist/lib/custom/ai-agent-run/flow/agent-run-flow.model.js.map +1 -1
- package/dist/lib/custom/ai-agent-run/flow/constellation.component.d.ts +14 -2
- package/dist/lib/custom/ai-agent-run/flow/constellation.component.d.ts.map +1 -1
- package/dist/lib/custom/ai-agent-run/flow/constellation.component.js +71 -53
- package/dist/lib/custom/ai-agent-run/flow/constellation.component.js.map +1 -1
- package/dist/lib/custom/ai-agent-run/flow/flame-cascade.component.d.ts +14 -2
- package/dist/lib/custom/ai-agent-run/flow/flame-cascade.component.d.ts.map +1 -1
- package/dist/lib/custom/ai-agent-run/flow/flame-cascade.component.js +70 -52
- package/dist/lib/custom/ai-agent-run/flow/flame-cascade.component.js.map +1 -1
- package/dist/lib/custom/ai-agent-run/flow/flow-svg.util.d.ts +8 -0
- package/dist/lib/custom/ai-agent-run/flow/flow-svg.util.d.ts.map +1 -1
- package/dist/lib/custom/ai-agent-run/flow/flow-svg.util.js +22 -6
- package/dist/lib/custom/ai-agent-run/flow/flow-svg.util.js.map +1 -1
- package/dist/lib/custom/ai-agent-run/flow/flowchart.component.d.ts +24 -2
- package/dist/lib/custom/ai-agent-run/flow/flowchart.component.d.ts.map +1 -1
- package/dist/lib/custom/ai-agent-run/flow/flowchart.component.js +91 -59
- package/dist/lib/custom/ai-agent-run/flow/flowchart.component.js.map +1 -1
- package/dist/lib/custom/ai-agent-run/flow/pan-zoom.d.ts +10 -2
- package/dist/lib/custom/ai-agent-run/flow/pan-zoom.d.ts.map +1 -1
- package/dist/lib/custom/ai-agent-run/flow/pan-zoom.js +33 -17
- package/dist/lib/custom/ai-agent-run/flow/pan-zoom.js.map +1 -1
- package/dist/lib/custom/ai-agent-run/flow/run-tree-flow-projection.d.ts +2 -0
- package/dist/lib/custom/ai-agent-run/flow/run-tree-flow-projection.d.ts.map +1 -1
- package/dist/lib/custom/ai-agent-run/flow/run-tree-flow-projection.js +34 -30
- package/dist/lib/custom/ai-agent-run/flow/run-tree-flow-projection.js.map +1 -1
- package/dist/lib/custom/ai-agent-run/flow/subway-lines.component.d.ts +14 -2
- package/dist/lib/custom/ai-agent-run/flow/subway-lines.component.d.ts.map +1 -1
- package/dist/lib/custom/ai-agent-run/flow/subway-lines.component.js +69 -51
- package/dist/lib/custom/ai-agent-run/flow/subway-lines.component.js.map +1 -1
- package/dist/lib/custom/custom-forms.module.d.ts +32 -30
- package/dist/lib/custom/custom-forms.module.d.ts.map +1 -1
- package/dist/lib/custom/custom-forms.module.js +21 -4
- package/dist/lib/custom/custom-forms.module.js.map +1 -1
- package/dist/lib/custom/shared/entity-selector-dialog.component.d.ts +38 -12
- package/dist/lib/custom/shared/entity-selector-dialog.component.d.ts.map +1 -1
- package/dist/lib/custom/shared/entity-selector-dialog.component.js +103 -51
- package/dist/lib/custom/shared/entity-selector-dialog.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJAIPrompt/mjaiprompt.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJAIPrompt/mjaiprompt.form.component.js +62 -26
- 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 +59 -51
- package/dist/lib/generated/Entities/MJAIPromptRun/mjaipromptrun.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJAIVendor/mjaivendor.form.component.js +76 -74
- package/dist/lib/generated/Entities/MJAIVendor/mjaivendor.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJCredential/mjcredential.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJCredential/mjcredential.form.component.js +33 -15
- package/dist/lib/generated/Entities/MJCredential/mjcredential.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 +100 -82
- package/dist/lib/generated/Entities/MJEntity/mjentity.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJEntityField/mjentityfield.form.component.js +24 -20
- package/dist/lib/generated/Entities/MJEntityField/mjentityfield.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJFeatureValue/mjfeaturevalue.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/MJFeatureValue/mjfeaturevalue.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/MJFeatureValue/mjfeaturevalue.form.component.js +122 -0
- package/dist/lib/generated/Entities/MJFeatureValue/mjfeaturevalue.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/MJFeatureValueCache/mjfeaturevaluecache.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/MJFeatureValueCache/mjfeaturevaluecache.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/MJFeatureValueCache/mjfeaturevaluecache.form.component.js +125 -0
- package/dist/lib/generated/Entities/MJFeatureValueCache/mjfeaturevaluecache.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/MJProcessRun/mjprocessrun.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJProcessRun/mjprocessrun.form.component.js +23 -5
- package/dist/lib/generated/Entities/MJProcessRun/mjprocessrun.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJProcessRunDetail/mjprocessrundetail.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJProcessRunDetail/mjprocessrundetail.form.component.js +25 -6
- package/dist/lib/generated/Entities/MJProcessRunDetail/mjprocessrundetail.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJProject/mjproject.form.component.js +27 -25
- package/dist/lib/generated/Entities/MJProject/mjproject.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJQuery/mjquery.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJQuery/mjquery.form.component.js +11 -15
- package/dist/lib/generated/Entities/MJQuery/mjquery.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 +43 -7
- package/dist/lib/generated/Entities/MJRecordProcess/mjrecordprocess.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJUser/mjuser.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJUser/mjuser.form.component.js +155 -119
- package/dist/lib/generated/Entities/MJUser/mjuser.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJWebSearchProvider/mjwebsearchprovider.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/MJWebSearchProvider/mjwebsearchprovider.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/MJWebSearchProvider/mjwebsearchprovider.form.component.js +78 -0
- package/dist/lib/generated/Entities/MJWebSearchProvider/mjwebsearchprovider.form.component.js.map +1 -0
- package/dist/lib/generated/generated-forms.module.d.ts +240 -237
- package/dist/lib/generated/generated-forms.module.d.ts.map +1 -1
- package/dist/lib/generated/generated-forms.module.js +11 -2
- package/dist/lib/generated/generated-forms.module.js.map +1 -1
- package/dist/lib/panels/ai-skill-sharing/ai-skill-sharing-panel.component.d.ts +5 -1
- package/dist/lib/panels/ai-skill-sharing/ai-skill-sharing-panel.component.d.ts.map +1 -1
- package/dist/lib/panels/ai-skill-sharing/ai-skill-sharing-panel.component.js +11 -3
- package/dist/lib/panels/ai-skill-sharing/ai-skill-sharing-panel.component.js.map +1 -1
- package/dist/lib/panels/content-sources/tag-pipeline-configuration.panel.d.ts +2 -0
- package/dist/lib/panels/content-sources/tag-pipeline-configuration.panel.d.ts.map +1 -1
- package/dist/lib/panels/content-sources/tag-pipeline-configuration.panel.js +16 -12
- package/dist/lib/panels/content-sources/tag-pipeline-configuration.panel.js.map +1 -1
- package/dist/lib/panels/content-sources/website-crawler-settings.panel.d.ts +1 -1
- package/dist/lib/panels/content-sources/website-crawler-settings.panel.js +2 -2
- package/dist/lib/panels/content-sources/website-crawler-settings.panel.js.map +1 -1
- package/dist/lib/panels/model-predictions/model-prediction.logic.d.ts +122 -1
- package/dist/lib/panels/model-predictions/model-prediction.logic.d.ts.map +1 -1
- package/dist/lib/panels/model-predictions/model-prediction.logic.js +236 -11
- package/dist/lib/panels/model-predictions/model-prediction.logic.js.map +1 -1
- package/dist/lib/panels/model-predictions/model-prediction.panel.d.ts +72 -13
- package/dist/lib/panels/model-predictions/model-prediction.panel.d.ts.map +1 -1
- package/dist/lib/panels/model-predictions/model-prediction.panel.js +577 -78
- package/dist/lib/panels/model-predictions/model-prediction.panel.js.map +1 -1
- package/dist/lib/shared/components/template-editor.component.d.ts +133 -14
- package/dist/lib/shared/components/template-editor.component.d.ts.map +1 -1
- package/dist/lib/shared/components/template-editor.component.js +322 -124
- package/dist/lib/shared/components/template-editor.component.js.map +1 -1
- package/dist/public-api.d.ts +4 -0
- package/dist/public-api.d.ts.map +1 -1
- package/dist/public-api.js +4 -0
- package/dist/public-api.js.map +1 -1
- package/package.json +43 -41
|
@@ -6,10 +6,10 @@ import { CompositeKey } from '@memberjunction/core';
|
|
|
6
6
|
import { SharedService } from '@memberjunction/ng-shared';
|
|
7
7
|
import { AIEngineBase } from '@memberjunction/ai-engine-base';
|
|
8
8
|
import { UserInfoEngine } from '@memberjunction/core-entities';
|
|
9
|
-
import {
|
|
9
|
+
import { BuildFlowModel, ActiveLeaf, Ancestors, FormatDuration, ShortLabel, FLOW_COLORS, FLOW_EMOJI, FLOW_LABEL } from './agent-run-flow.model';
|
|
10
10
|
import { FlameCascadeComponent } from './flame-cascade.component';
|
|
11
11
|
import { SubwayLinesComponent } from './subway-lines.component';
|
|
12
|
-
import {
|
|
12
|
+
import { BuildFlowModelFromTree } from './run-tree-flow-projection';
|
|
13
13
|
import { ConstellationComponent } from './constellation.component';
|
|
14
14
|
import { FlowchartComponent } from './flowchart.component';
|
|
15
15
|
import * as i0 from "@angular/core";
|
|
@@ -210,30 +210,30 @@ function AIAgentRunFlowComponent_Conditional_18_Template(rf, ctx) { if (rf & 1)
|
|
|
210
210
|
*/
|
|
211
211
|
export class AIAgentRunFlowComponent {
|
|
212
212
|
constructor() {
|
|
213
|
-
this.
|
|
214
|
-
this.
|
|
215
|
-
this.
|
|
216
|
-
this.
|
|
213
|
+
this.AgentName = null;
|
|
214
|
+
this.RunStatus = '';
|
|
215
|
+
this.AgentIconClass = null;
|
|
216
|
+
this.AgentLogoUrl = null;
|
|
217
217
|
this.runTree = null;
|
|
218
|
-
this.
|
|
218
|
+
this.Modes = [
|
|
219
219
|
{ key: 'subway', label: 'Subway Lines', icon: 'fa-train-subway', enabled: true },
|
|
220
220
|
{ key: 'constellation', label: 'Constellation', icon: 'fa-star', enabled: true },
|
|
221
221
|
{ key: 'flow', label: 'Flow', icon: 'fa-diagram-project', enabled: true },
|
|
222
222
|
{ key: 'flame', label: 'Flame Cascade', icon: 'fa-fire', enabled: true }
|
|
223
223
|
];
|
|
224
|
-
this.
|
|
224
|
+
this.Mode = 'subway';
|
|
225
225
|
this.model = null;
|
|
226
|
-
this.
|
|
227
|
-
this.
|
|
228
|
-
this.
|
|
229
|
-
this.
|
|
226
|
+
this.Playing = false;
|
|
227
|
+
this.Speed = 1;
|
|
228
|
+
this.Loading = true;
|
|
229
|
+
this.HasData = false;
|
|
230
230
|
/** Selected node detail (any mode). */
|
|
231
|
-
this.
|
|
231
|
+
this.SelectedStepItem = null;
|
|
232
232
|
this.selectedNodeId = -1;
|
|
233
233
|
this.logRows = new Map();
|
|
234
234
|
this.lastActiveRowId = -1;
|
|
235
235
|
/** Right-panel width (rail / inspector), resizable + persisted per user. Default is 50px wider than the old fixed panel. */
|
|
236
|
-
this.
|
|
236
|
+
this.PanelWidth = 410;
|
|
237
237
|
this.PANEL_KEY = 'mj.agentRunFlow.panelWidth.v1';
|
|
238
238
|
this.resizing = false;
|
|
239
239
|
this.resizeStartX = 0;
|
|
@@ -249,6 +249,54 @@ export class AIAgentRunFlowComponent {
|
|
|
249
249
|
this.zone = inject(NgZone);
|
|
250
250
|
this.cdr = inject(ChangeDetectorRef);
|
|
251
251
|
}
|
|
252
|
+
/** @deprecated Use {@link AiAgentRunId}. */
|
|
253
|
+
set aiAgentRunId(value) {
|
|
254
|
+
this.AiAgentRunId = value;
|
|
255
|
+
}
|
|
256
|
+
/** @deprecated Use {@link AiAgentRunId}. */
|
|
257
|
+
get aiAgentRunId() {
|
|
258
|
+
return this.AiAgentRunId;
|
|
259
|
+
}
|
|
260
|
+
/** @deprecated Use {@link DataHelper}. */
|
|
261
|
+
set dataHelper(value) {
|
|
262
|
+
this.DataHelper = value;
|
|
263
|
+
}
|
|
264
|
+
/** @deprecated Use {@link DataHelper}. */
|
|
265
|
+
get dataHelper() {
|
|
266
|
+
return this.DataHelper;
|
|
267
|
+
}
|
|
268
|
+
/** @deprecated Use {@link AgentName}. */
|
|
269
|
+
set agentName(value) {
|
|
270
|
+
this.AgentName = value;
|
|
271
|
+
}
|
|
272
|
+
/** @deprecated Use {@link AgentName}. */
|
|
273
|
+
get agentName() {
|
|
274
|
+
return this.AgentName;
|
|
275
|
+
}
|
|
276
|
+
/** @deprecated Use {@link RunStatus}. */
|
|
277
|
+
set runStatus(value) {
|
|
278
|
+
this.RunStatus = value;
|
|
279
|
+
}
|
|
280
|
+
/** @deprecated Use {@link RunStatus}. */
|
|
281
|
+
get runStatus() {
|
|
282
|
+
return this.RunStatus;
|
|
283
|
+
}
|
|
284
|
+
/** @deprecated Use {@link AgentIconClass}. */
|
|
285
|
+
set agentIconClass(value) {
|
|
286
|
+
this.AgentIconClass = value;
|
|
287
|
+
}
|
|
288
|
+
/** @deprecated Use {@link AgentIconClass}. */
|
|
289
|
+
get agentIconClass() {
|
|
290
|
+
return this.AgentIconClass;
|
|
291
|
+
}
|
|
292
|
+
/** @deprecated Use {@link AgentLogoUrl}. */
|
|
293
|
+
set agentLogoUrl(value) {
|
|
294
|
+
this.AgentLogoUrl = value;
|
|
295
|
+
}
|
|
296
|
+
/** @deprecated Use {@link AgentLogoUrl}. */
|
|
297
|
+
get agentLogoUrl() {
|
|
298
|
+
return this.AgentLogoUrl;
|
|
299
|
+
}
|
|
252
300
|
/**
|
|
253
301
|
* The run's execution tree, loaded once by the form and shared with every tab.
|
|
254
302
|
*
|
|
@@ -259,22 +307,94 @@ export class AIAgentRunFlowComponent {
|
|
|
259
307
|
this.runTree = value;
|
|
260
308
|
void this.rebuildModel();
|
|
261
309
|
}
|
|
310
|
+
/** @deprecated Use {@link Modes}. */
|
|
311
|
+
get modes() {
|
|
312
|
+
return this.Modes;
|
|
313
|
+
}
|
|
314
|
+
/** @deprecated Use {@link Modes}. */
|
|
315
|
+
set modes(value) {
|
|
316
|
+
this.Modes = value;
|
|
317
|
+
}
|
|
318
|
+
/** @deprecated Use {@link Mode}. */
|
|
319
|
+
get mode() {
|
|
320
|
+
return this.Mode;
|
|
321
|
+
}
|
|
322
|
+
/** @deprecated Use {@link Mode}. */
|
|
323
|
+
set mode(value) {
|
|
324
|
+
this.Mode = value;
|
|
325
|
+
}
|
|
326
|
+
/** @deprecated Use {@link Playing}. */
|
|
327
|
+
get playing() {
|
|
328
|
+
return this.Playing;
|
|
329
|
+
}
|
|
330
|
+
/** @deprecated Use {@link Playing}. */
|
|
331
|
+
set playing(value) {
|
|
332
|
+
this.Playing = value;
|
|
333
|
+
}
|
|
334
|
+
/** @deprecated Use {@link Speed}. */
|
|
335
|
+
get speed() {
|
|
336
|
+
return this.Speed;
|
|
337
|
+
}
|
|
338
|
+
/** @deprecated Use {@link Speed}. */
|
|
339
|
+
set speed(value) {
|
|
340
|
+
this.Speed = value;
|
|
341
|
+
}
|
|
342
|
+
/** @deprecated Use {@link Loading}. */
|
|
343
|
+
get loading() {
|
|
344
|
+
return this.Loading;
|
|
345
|
+
}
|
|
346
|
+
/** @deprecated Use {@link Loading}. */
|
|
347
|
+
set loading(value) {
|
|
348
|
+
this.Loading = value;
|
|
349
|
+
}
|
|
350
|
+
/** @deprecated Use {@link HasData}. */
|
|
351
|
+
get hasData() {
|
|
352
|
+
return this.HasData;
|
|
353
|
+
}
|
|
354
|
+
/** @deprecated Use {@link HasData}. */
|
|
355
|
+
set hasData(value) {
|
|
356
|
+
this.HasData = value;
|
|
357
|
+
}
|
|
358
|
+
/** @deprecated Use {@link SelectedStepItem}. */
|
|
359
|
+
get selectedStepItem() {
|
|
360
|
+
return this.SelectedStepItem;
|
|
361
|
+
}
|
|
362
|
+
/** @deprecated Use {@link SelectedStepItem}. */
|
|
363
|
+
set selectedStepItem(value) {
|
|
364
|
+
this.SelectedStepItem = value;
|
|
365
|
+
}
|
|
262
366
|
/** The animated modes share the master clock + narration rail; Flow is static. */
|
|
263
|
-
get
|
|
367
|
+
get IsAnimated() { return this.Mode !== 'flow'; }
|
|
368
|
+
/** @deprecated Use {@link IsAnimated}. */
|
|
369
|
+
get isAnimated() {
|
|
370
|
+
return this.IsAnimated;
|
|
371
|
+
}
|
|
264
372
|
/** Rail (now-executing + log tree) shows only for animated modes with nothing selected. */
|
|
265
|
-
get
|
|
373
|
+
get ShowRail() { return this.IsAnimated && !this.SelectedStepItem; }
|
|
374
|
+
/** @deprecated Use {@link ShowRail}. */
|
|
375
|
+
get showRail() {
|
|
376
|
+
return this.ShowRail;
|
|
377
|
+
}
|
|
378
|
+
/** @deprecated Use {@link PanelWidth}. */
|
|
379
|
+
get panelWidth() {
|
|
380
|
+
return this.PanelWidth;
|
|
381
|
+
}
|
|
382
|
+
/** @deprecated Use {@link PanelWidth}. */
|
|
383
|
+
set panelWidth(value) {
|
|
384
|
+
this.PanelWidth = value;
|
|
385
|
+
}
|
|
266
386
|
ngAfterViewInit() {
|
|
267
387
|
this.viewReady = true;
|
|
268
388
|
const savedW = UserInfoEngine.Instance.GetSetting(this.PANEL_KEY);
|
|
269
389
|
if (savedW) {
|
|
270
390
|
const n = +savedW;
|
|
271
391
|
if (n >= 280)
|
|
272
|
-
this.
|
|
392
|
+
this.PanelWidth = Math.min(n, this.maxPanelWidth());
|
|
273
393
|
}
|
|
274
|
-
combineLatest([this.
|
|
394
|
+
combineLatest([this.DataHelper.steps$, this.DataHelper.loading$])
|
|
275
395
|
.pipe(takeUntil(this.destroy$))
|
|
276
396
|
.subscribe(([steps, loading]) => {
|
|
277
|
-
this.
|
|
397
|
+
this.Loading = loading && steps.length === 0;
|
|
278
398
|
if (!loading || steps.length > 0)
|
|
279
399
|
this.rebuildModel();
|
|
280
400
|
this.cdr.markForCheck();
|
|
@@ -292,54 +412,74 @@ export class AIAgentRunFlowComponent {
|
|
|
292
412
|
async rebuildModel() {
|
|
293
413
|
const wasEmpty = !this.model;
|
|
294
414
|
await AIEngineBase.Instance.EnsureLoaded(); // agent icons/logos read synchronously during build
|
|
295
|
-
const rootIcon = { iconClass: this.
|
|
415
|
+
const rootIcon = { iconClass: this.AgentIconClass || 'fa-robot', logoUrl: this.AgentLogoUrl };
|
|
296
416
|
// The TREE is the source. It carries the run's steps AND any task-graph work those steps
|
|
297
417
|
// submitted — which the step-row builder cannot see at all, because a workflow's steps live in
|
|
298
418
|
// MJ: Tasks rather than in the run's step list. Falling back to the step builder when the tree
|
|
299
419
|
// has not arrived keeps the view populated on first paint rather than flashing empty.
|
|
300
420
|
const model = this.runTree
|
|
301
|
-
?
|
|
302
|
-
: await
|
|
421
|
+
? BuildFlowModelFromTree(this.runTree, this.AgentName ?? '', this.RunStatus, rootIcon)
|
|
422
|
+
: await BuildFlowModel(this.AgentName ?? '', this.RunStatus, rootIcon, this.DataHelper);
|
|
303
423
|
if (!model)
|
|
304
424
|
return;
|
|
305
425
|
this.model = model;
|
|
306
|
-
this.
|
|
426
|
+
this.HasData = model.Leaves.length > 0;
|
|
307
427
|
if (wasEmpty)
|
|
308
428
|
this.p = 0;
|
|
309
429
|
this.lastLeafId = -1;
|
|
310
430
|
this.cdr.markForCheck();
|
|
311
431
|
}
|
|
312
432
|
/* -------------------------------- transport ------------------------------- */
|
|
313
|
-
|
|
314
|
-
if (!this.
|
|
433
|
+
TogglePlay() {
|
|
434
|
+
if (!this.HasData)
|
|
315
435
|
return;
|
|
316
436
|
if (this.p >= 1)
|
|
317
437
|
this.p = 0;
|
|
318
|
-
this.
|
|
438
|
+
this.Playing = !this.Playing;
|
|
319
439
|
this.lastTs = 0;
|
|
320
440
|
}
|
|
321
|
-
|
|
322
|
-
|
|
441
|
+
/** @deprecated Use {@link TogglePlay}. */
|
|
442
|
+
togglePlay() {
|
|
443
|
+
return this.TogglePlay();
|
|
444
|
+
}
|
|
445
|
+
Restart() {
|
|
446
|
+
if (!this.HasData)
|
|
323
447
|
return;
|
|
324
448
|
this.p = 0;
|
|
325
|
-
this.
|
|
449
|
+
this.Playing = true;
|
|
326
450
|
this.lastTs = 0;
|
|
327
451
|
this.lastLeafId = -1;
|
|
328
452
|
}
|
|
329
|
-
|
|
453
|
+
/** @deprecated Use {@link Restart}. */
|
|
454
|
+
restart() {
|
|
455
|
+
return this.Restart();
|
|
456
|
+
}
|
|
457
|
+
OnScrub(value) {
|
|
330
458
|
this.p = (+value) / 1000;
|
|
331
|
-
this.
|
|
459
|
+
this.Playing = false;
|
|
332
460
|
}
|
|
333
|
-
|
|
334
|
-
|
|
461
|
+
/** @deprecated Use {@link OnScrub}. */
|
|
462
|
+
onScrub(value) {
|
|
463
|
+
return this.OnScrub(value);
|
|
464
|
+
}
|
|
465
|
+
OnSpeed(value) { this.Speed = (+value) / 100; }
|
|
466
|
+
/** @deprecated Use {@link OnSpeed}. */
|
|
467
|
+
onSpeed(value) {
|
|
468
|
+
return this.OnSpeed(value);
|
|
469
|
+
}
|
|
470
|
+
SelectMode(m) {
|
|
335
471
|
if (!m.enabled)
|
|
336
472
|
return;
|
|
337
|
-
this.
|
|
473
|
+
this.Mode = m.key;
|
|
338
474
|
this.applyRendererSelection(this.selectedNodeId === -1 ? null : this.selectedNodeId);
|
|
339
475
|
this.currentRenderer?.ReapplyView?.(); // ensure the now-visible renderer shows its OWN (per-type) zoom
|
|
340
476
|
}
|
|
477
|
+
/** @deprecated Use {@link SelectMode}. */
|
|
478
|
+
selectMode(m) {
|
|
479
|
+
return this.SelectMode(m);
|
|
480
|
+
}
|
|
341
481
|
get currentRenderer() {
|
|
342
|
-
switch (this.
|
|
482
|
+
switch (this.Mode) {
|
|
343
483
|
case 'flame': return this.flame;
|
|
344
484
|
case 'subway': return this.subway;
|
|
345
485
|
case 'constellation': return this.constellation;
|
|
@@ -348,90 +488,122 @@ export class AIAgentRunFlowComponent {
|
|
|
348
488
|
}
|
|
349
489
|
}
|
|
350
490
|
/* --------------------------- zoom (shared toolbar) ------------------------ */
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
491
|
+
ZoomIn() { this.currentRenderer?.ZoomIn?.(); }
|
|
492
|
+
/** @deprecated Use {@link ZoomIn}. */
|
|
493
|
+
zoomIn() {
|
|
494
|
+
return this.ZoomIn();
|
|
495
|
+
}
|
|
496
|
+
ZoomOut() { this.currentRenderer?.ZoomOut?.(); }
|
|
497
|
+
/** @deprecated Use {@link ZoomOut}. */
|
|
498
|
+
zoomOut() {
|
|
499
|
+
return this.ZoomOut();
|
|
500
|
+
}
|
|
501
|
+
FitReset() { this.currentRenderer?.FitReset?.(); }
|
|
502
|
+
/** @deprecated Use {@link FitReset}. */
|
|
503
|
+
fitReset() {
|
|
504
|
+
return this.FitReset();
|
|
505
|
+
}
|
|
354
506
|
/* ---------------------------- panel resize ------------------------------- */
|
|
355
507
|
/** Cap the right panel at 75% of the viewport width. */
|
|
356
508
|
maxPanelWidth() { return Math.max(360, window.innerWidth * 0.75); }
|
|
357
|
-
|
|
509
|
+
StartResize(e) {
|
|
358
510
|
e.preventDefault();
|
|
359
511
|
this.resizing = true;
|
|
360
512
|
this.resizeStartX = e.clientX;
|
|
361
|
-
this.resizeStartW = this.
|
|
513
|
+
this.resizeStartW = this.PanelWidth;
|
|
362
514
|
const move = (ev) => {
|
|
363
515
|
if (!this.resizing)
|
|
364
516
|
return;
|
|
365
517
|
const w = this.resizeStartW + (this.resizeStartX - ev.clientX); // drag left → wider
|
|
366
|
-
this.
|
|
518
|
+
this.PanelWidth = Math.max(280, Math.min(this.maxPanelWidth(), w));
|
|
367
519
|
this.cdr.markForCheck();
|
|
368
520
|
};
|
|
369
521
|
const up = () => {
|
|
370
522
|
this.resizing = false;
|
|
371
523
|
window.removeEventListener('mousemove', move);
|
|
372
524
|
window.removeEventListener('mouseup', up);
|
|
373
|
-
UserInfoEngine.Instance.SetSettingDebounced(this.PANEL_KEY, String(Math.round(this.
|
|
525
|
+
UserInfoEngine.Instance.SetSettingDebounced(this.PANEL_KEY, String(Math.round(this.PanelWidth)));
|
|
374
526
|
};
|
|
375
527
|
window.addEventListener('mousemove', move);
|
|
376
528
|
window.addEventListener('mouseup', up);
|
|
377
529
|
}
|
|
530
|
+
/** @deprecated Use {@link StartResize}. */
|
|
531
|
+
startResize(e) {
|
|
532
|
+
return this.StartResize(e);
|
|
533
|
+
}
|
|
378
534
|
/* -------------------------------- selection ------------------------------ */
|
|
379
535
|
/** A node was clicked in any renderer (or a log row) — highlight it everywhere and show its detail. */
|
|
380
|
-
|
|
536
|
+
SelectStep(n) {
|
|
381
537
|
this.zone.run(() => {
|
|
382
|
-
this.selectedNodeId = n.
|
|
383
|
-
this.
|
|
538
|
+
this.selectedNodeId = n.Id;
|
|
539
|
+
this.SelectedStepItem = this.toTimelineItem(n);
|
|
384
540
|
this.cdr.markForCheck();
|
|
385
541
|
});
|
|
386
|
-
this.applyRendererSelection(n.
|
|
542
|
+
this.applyRendererSelection(n.Id);
|
|
387
543
|
}
|
|
388
|
-
|
|
389
|
-
|
|
544
|
+
/** @deprecated Use {@link SelectStep}. */
|
|
545
|
+
selectStep(n) {
|
|
546
|
+
return this.SelectStep(n);
|
|
547
|
+
}
|
|
548
|
+
CloseDetail() {
|
|
549
|
+
this.zone.run(() => { this.SelectedStepItem = null; this.selectedNodeId = -1; this.cdr.markForCheck(); });
|
|
390
550
|
this.applyRendererSelection(null);
|
|
391
551
|
this.flowchart?.Deselect();
|
|
392
552
|
}
|
|
553
|
+
/** @deprecated Use {@link CloseDetail}. */
|
|
554
|
+
closeDetail() {
|
|
555
|
+
return this.CloseDetail();
|
|
556
|
+
}
|
|
393
557
|
applyRendererSelection(id) {
|
|
394
558
|
this.flame?.SetSelected(id);
|
|
395
559
|
this.subway?.SetSelected(id);
|
|
396
560
|
this.constellation?.SetSelected(id);
|
|
397
561
|
}
|
|
398
|
-
|
|
562
|
+
OnDetailNavigateActionLog(logId) {
|
|
399
563
|
SharedService.Instance.OpenEntityRecord('MJ: Action Execution Logs', CompositeKey.FromID(logId));
|
|
400
564
|
}
|
|
401
|
-
|
|
565
|
+
/** @deprecated Use {@link OnDetailNavigateActionLog}. */
|
|
566
|
+
onDetailNavigateActionLog(logId) {
|
|
567
|
+
return this.OnDetailNavigateActionLog(logId);
|
|
568
|
+
}
|
|
569
|
+
async OnDetailCopy(text) {
|
|
402
570
|
try {
|
|
403
571
|
await navigator.clipboard.writeText(text);
|
|
404
572
|
}
|
|
405
573
|
catch { /* clipboard unavailable */ }
|
|
406
574
|
}
|
|
575
|
+
/** @deprecated Use {@link OnDetailCopy}. */
|
|
576
|
+
async onDetailCopy(text) {
|
|
577
|
+
return this.OnDetailCopy(text);
|
|
578
|
+
}
|
|
407
579
|
toTimelineItem(n) {
|
|
408
|
-
if (!n.
|
|
580
|
+
if (!n.Raw)
|
|
409
581
|
return null;
|
|
410
582
|
return {
|
|
411
|
-
id: n.
|
|
412
|
-
status: n.
|
|
413
|
-
duration:
|
|
583
|
+
id: n.Raw.ID, type: 'step', title: n.Name, subtitle: `Type: ${n.Raw.StepType}`,
|
|
584
|
+
status: n.Status, startTime: n.Raw.StartedAt, endTime: n.Raw.CompletedAt || undefined,
|
|
585
|
+
duration: FormatDuration(n.RealDur), icon: 'fa-circle', color: '', data: n.Raw, level: n.Depth
|
|
414
586
|
};
|
|
415
587
|
}
|
|
416
588
|
/* ------------------------------- master loop ------------------------------ */
|
|
417
589
|
tick(ts) {
|
|
418
|
-
const animated = this.
|
|
419
|
-
if (animated && this.
|
|
590
|
+
const animated = this.IsAnimated;
|
|
591
|
+
if (animated && this.Playing && this.HasData) {
|
|
420
592
|
if (!this.lastTs)
|
|
421
593
|
this.lastTs = ts;
|
|
422
594
|
const dt = ts - this.lastTs;
|
|
423
595
|
this.lastTs = ts;
|
|
424
|
-
this.p += dt / (this.PLAY_MS / this.
|
|
596
|
+
this.p += dt / (this.PLAY_MS / this.Speed);
|
|
425
597
|
if (this.p >= 1) {
|
|
426
598
|
this.p = 1;
|
|
427
|
-
this.
|
|
599
|
+
this.Playing = false;
|
|
428
600
|
this.zone.run(() => this.cdr.markForCheck());
|
|
429
601
|
}
|
|
430
602
|
}
|
|
431
603
|
else {
|
|
432
604
|
this.lastTs = 0;
|
|
433
605
|
}
|
|
434
|
-
if (this.viewReady && this.model && this.
|
|
606
|
+
if (this.viewReady && this.model && this.HasData) {
|
|
435
607
|
if (animated) {
|
|
436
608
|
this.currentRenderer?.Render(this.p, ts);
|
|
437
609
|
this.updateRail(ts);
|
|
@@ -450,48 +622,48 @@ export class AIAgentRunFlowComponent {
|
|
|
450
622
|
// (the @if remounted it with template defaults) or the model changed. Without
|
|
451
623
|
// this, a remount at run-completion leaves an empty log + a blank now-card.
|
|
452
624
|
if (this.loglistRef &&
|
|
453
|
-
(this.logModelRef !== m || (this.loglistRef.nativeElement.childElementCount === 0 && m.
|
|
625
|
+
(this.logModelRef !== m || (this.loglistRef.nativeElement.childElementCount === 0 && m.Nodes.length > 1))) {
|
|
454
626
|
this.buildLogTree();
|
|
455
627
|
this.logModelRef = m;
|
|
456
628
|
this.lastLeafId = -1; // force the now-card to repopulate the fresh DOM
|
|
457
629
|
}
|
|
458
|
-
const leaf =
|
|
459
|
-
const prog = this.p >= leaf.
|
|
630
|
+
const leaf = ActiveLeaf(m, this.p);
|
|
631
|
+
const prog = this.p >= leaf.T1 ? 1 : Math.max(0, (this.p - leaf.T0) / (leaf.T1 - leaf.T0));
|
|
460
632
|
if (this.scrubRef)
|
|
461
633
|
this.scrubRef.nativeElement.value = String(Math.round(this.p * 1000));
|
|
462
634
|
if (this.clockRef) {
|
|
463
|
-
const realT = this.p >= 1 ? m.
|
|
464
|
-
this.clockRef.nativeElement.textContent = `${
|
|
635
|
+
const realT = this.p >= 1 ? m.Total : leaf.R0 + prog * leaf.RealDur;
|
|
636
|
+
this.clockRef.nativeElement.textContent = `${FormatDuration(realT)} / ${FormatDuration(m.Total)}`;
|
|
465
637
|
}
|
|
466
638
|
if (this.nowBarRef)
|
|
467
639
|
this.nowBarRef.nativeElement.style.width = `${prog * 100}%`;
|
|
468
|
-
if (leaf.
|
|
469
|
-
this.lastLeafId = leaf.
|
|
640
|
+
if (leaf.Id !== this.lastLeafId) {
|
|
641
|
+
this.lastLeafId = leaf.Id;
|
|
470
642
|
this.refreshNowCard(leaf);
|
|
471
643
|
}
|
|
472
644
|
if (this.nowStatRef) {
|
|
473
|
-
this.nowStatRef.nativeElement.textContent = this.p >= 1 ? 'done' : (this.p > leaf.
|
|
645
|
+
this.nowStatRef.nativeElement.textContent = this.p >= 1 ? 'done' : (this.p > leaf.T0 ? 'running' : 'starting');
|
|
474
646
|
}
|
|
475
647
|
if (this.loglistRef)
|
|
476
648
|
this.updateLogTree();
|
|
477
649
|
}
|
|
478
650
|
refreshNowCard(leaf) {
|
|
479
|
-
const col = FLOW_COLORS[leaf.
|
|
651
|
+
const col = FLOW_COLORS[leaf.Type];
|
|
480
652
|
if (this.nowIcoRef)
|
|
481
|
-
this.nowIcoRef.nativeElement.textContent = FLOW_EMOJI[leaf.
|
|
653
|
+
this.nowIcoRef.nativeElement.textContent = FLOW_EMOJI[leaf.Type];
|
|
482
654
|
if (this.nowNameRef)
|
|
483
|
-
this.nowNameRef.nativeElement.textContent = leaf.
|
|
655
|
+
this.nowNameRef.nativeElement.textContent = leaf.Name;
|
|
484
656
|
if (this.nowTypeRef) {
|
|
485
|
-
this.nowTypeRef.nativeElement.textContent = FLOW_LABEL[leaf.
|
|
657
|
+
this.nowTypeRef.nativeElement.textContent = FLOW_LABEL[leaf.Type];
|
|
486
658
|
this.nowTypeRef.nativeElement.style.color = col;
|
|
487
659
|
}
|
|
488
660
|
if (this.nowDurRef)
|
|
489
|
-
this.nowDurRef.nativeElement.textContent =
|
|
661
|
+
this.nowDurRef.nativeElement.textContent = FormatDuration(leaf.RealDur);
|
|
490
662
|
if (this.nowModelRef)
|
|
491
|
-
this.nowModelRef.nativeElement.textContent = leaf.
|
|
663
|
+
this.nowModelRef.nativeElement.textContent = leaf.Model ?? '—';
|
|
492
664
|
if (this.crumbRef) {
|
|
493
|
-
const chain =
|
|
494
|
-
this.crumbRef.nativeElement.innerHTML = chain.map((n, i) => `${i ? '<span class="sep">›</span>' : ''}<span style="color:${FLOW_COLORS[n.
|
|
665
|
+
const chain = Ancestors(leaf);
|
|
666
|
+
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('');
|
|
495
667
|
}
|
|
496
668
|
}
|
|
497
669
|
/* ------------------------------ log tree (rail) --------------------------- */
|
|
@@ -502,41 +674,41 @@ export class AIAgentRunFlowComponent {
|
|
|
502
674
|
this.logRows.clear();
|
|
503
675
|
this.lastActiveRowId = -1;
|
|
504
676
|
const m = this.model;
|
|
505
|
-
for (const n of m.
|
|
506
|
-
if (n.
|
|
677
|
+
for (const n of m.Nodes) {
|
|
678
|
+
if (n.Depth === 0)
|
|
507
679
|
continue; // skip the synthetic root (it's the header)
|
|
508
|
-
const col = FLOW_COLORS[n.
|
|
680
|
+
const col = FLOW_COLORS[n.Type];
|
|
509
681
|
const row = document.createElement('div');
|
|
510
682
|
row.className = 'ftree-row';
|
|
511
|
-
row.style.paddingLeft = `${6 + (n.
|
|
512
|
-
const ico = n.
|
|
513
|
-
? `<img class="ftree-logo" src="${this.escape(n.
|
|
514
|
-
: `<i class="ftree-ico fa-solid ${this.escape(n.
|
|
683
|
+
row.style.paddingLeft = `${6 + (n.Depth - 1) * 15}px`;
|
|
684
|
+
const ico = n.LogoUrl
|
|
685
|
+
? `<img class="ftree-logo" src="${this.escape(n.LogoUrl)}" alt=""/>`
|
|
686
|
+
: `<i class="ftree-ico fa-solid ${this.escape(n.IconClass)}" style="color:${col}"></i>`;
|
|
515
687
|
row.innerHTML = ico +
|
|
516
|
-
`<span class="ftree-name">${this.escape(
|
|
517
|
-
`<span class="ftree-dur">${
|
|
518
|
-
row.addEventListener('click', () => this.
|
|
688
|
+
`<span class="ftree-name">${this.escape(ShortLabel(n))}</span>` +
|
|
689
|
+
`<span class="ftree-dur">${FormatDuration(n.RealDur)}</span>`;
|
|
690
|
+
row.addEventListener('click', () => this.SelectStep(n));
|
|
519
691
|
list.appendChild(row);
|
|
520
|
-
this.logRows.set(n.
|
|
692
|
+
this.logRows.set(n.Id, row);
|
|
521
693
|
}
|
|
522
694
|
}
|
|
523
695
|
/** Sync each log row's state (pending / running / done / selected) with the clock. */
|
|
524
696
|
updateLogTree() {
|
|
525
697
|
const m = this.model;
|
|
526
|
-
for (const n of m.
|
|
527
|
-
if (n.
|
|
698
|
+
for (const n of m.Nodes) {
|
|
699
|
+
if (n.Depth === 0)
|
|
528
700
|
continue;
|
|
529
|
-
const row = this.logRows.get(n.
|
|
701
|
+
const row = this.logRows.get(n.Id);
|
|
530
702
|
if (!row)
|
|
531
703
|
continue;
|
|
532
|
-
const started = this.p >= n.
|
|
533
|
-
const active = started && this.p < n.
|
|
704
|
+
const started = this.p >= n.T0;
|
|
705
|
+
const active = started && this.p < n.T1;
|
|
534
706
|
row.classList.toggle('ftree-pending', !started);
|
|
535
707
|
row.classList.toggle('ftree-active', active);
|
|
536
|
-
row.classList.toggle('ftree-done', this.p >= n.
|
|
537
|
-
row.classList.toggle('ftree-selected', n.
|
|
538
|
-
if (active && n.
|
|
539
|
-
this.lastActiveRowId = n.
|
|
708
|
+
row.classList.toggle('ftree-done', this.p >= n.T1);
|
|
709
|
+
row.classList.toggle('ftree-selected', n.Id === this.selectedNodeId);
|
|
710
|
+
if (active && n.Id !== this.lastActiveRowId && !n.Children.length) {
|
|
711
|
+
this.lastActiveRowId = n.Id;
|
|
540
712
|
row.scrollIntoView({ block: 'nearest' });
|
|
541
713
|
}
|
|
542
714
|
}
|
|
@@ -564,7 +736,7 @@ export class AIAgentRunFlowComponent {
|
|
|
564
736
|
i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.nowStatRef = _t.first);
|
|
565
737
|
i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.nowBarRef = _t.first);
|
|
566
738
|
i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.loglistRef = _t.first);
|
|
567
|
-
} }, inputs: { aiAgentRunId: "aiAgentRunId", dataHelper: "dataHelper", agentName: "agentName", runStatus: "runStatus", agentIconClass: "agentIconClass", agentLogoUrl: "agentLogoUrl", RunTree: "RunTree" }, 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) {
|
|
739
|
+
} }, inputs: { AiAgentRunId: "AiAgentRunId", aiAgentRunId: "aiAgentRunId", DataHelper: "DataHelper", dataHelper: "dataHelper", AgentName: "AgentName", agentName: "agentName", RunStatus: "RunStatus", runStatus: "runStatus", AgentIconClass: "AgentIconClass", agentIconClass: "agentIconClass", AgentLogoUrl: "AgentLogoUrl", agentLogoUrl: "agentLogoUrl", RunTree: "RunTree" }, 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) {
|
|
568
740
|
i0.ɵɵelementStart(0, "div", 11)(1, "div", 12);
|
|
569
741
|
i0.ɵɵrepeaterCreate(2, AIAgentRunFlowComponent_For_3_Template, 5, 9, "button", 13, _forTrack0);
|
|
570
742
|
i0.ɵɵelementEnd();
|
|
@@ -623,16 +795,28 @@ export class AIAgentRunFlowComponent {
|
|
|
623
795
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(AIAgentRunFlowComponent, [{
|
|
624
796
|
type: Component,
|
|
625
797
|
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"] }]
|
|
626
|
-
}], null, {
|
|
798
|
+
}], null, { AiAgentRunId: [{
|
|
799
|
+
type: Input
|
|
800
|
+
}], aiAgentRunId: [{
|
|
801
|
+
type: Input
|
|
802
|
+
}], DataHelper: [{
|
|
627
803
|
type: Input
|
|
628
804
|
}], dataHelper: [{
|
|
629
805
|
type: Input
|
|
806
|
+
}], AgentName: [{
|
|
807
|
+
type: Input
|
|
630
808
|
}], agentName: [{
|
|
631
809
|
type: Input
|
|
810
|
+
}], RunStatus: [{
|
|
811
|
+
type: Input
|
|
632
812
|
}], runStatus: [{
|
|
633
813
|
type: Input
|
|
814
|
+
}], AgentIconClass: [{
|
|
815
|
+
type: Input
|
|
634
816
|
}], agentIconClass: [{
|
|
635
817
|
type: Input
|
|
818
|
+
}], AgentLogoUrl: [{
|
|
819
|
+
type: Input
|
|
636
820
|
}], agentLogoUrl: [{
|
|
637
821
|
type: Input
|
|
638
822
|
}], RunTree: [{
|