@memberjunction/ng-core-entity-forms 6.2.0-edge.0 → 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/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-view-models.d.ts +31 -0
- package/dist/lib/custom/MLModels/ml-model-view-models.d.ts.map +1 -1
- package/dist/lib/custom/MLModels/ml-model-view-models.js +52 -16
- package/dist/lib/custom/MLModels/ml-model-view-models.js.map +1 -1
- package/dist/lib/custom/MLModels/ps-model-detail.component.d.ts +107 -10
- package/dist/lib/custom/MLModels/ps-model-detail.component.d.ts.map +1 -1
- package/dist/lib/custom/MLModels/ps-model-detail.component.js +291 -101
- package/dist/lib/custom/MLModels/ps-model-detail.component.js.map +1 -1
- 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 +110 -4
- package/dist/lib/custom/RecordProcesses/record-process-form.component.d.ts.map +1 -1
- package/dist/lib/custom/RecordProcesses/record-process-form.component.js +858 -86
- 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 +140 -15
- 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 +326 -100
- 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/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/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/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/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/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 +45 -19
- package/dist/lib/panels/model-predictions/model-prediction.logic.d.ts.map +1 -1
- package/dist/lib/panels/model-predictions/model-prediction.logic.js +95 -43
- package/dist/lib/panels/model-predictions/model-prediction.logic.js.map +1 -1
- package/dist/lib/panels/model-predictions/model-prediction.panel.d.ts +20 -16
- package/dist/lib/panels/model-predictions/model-prediction.panel.d.ts.map +1 -1
- package/dist/lib/panels/model-predictions/model-prediction.panel.js +73 -65
- 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/package.json +43 -42
|
@@ -12,7 +12,7 @@ export declare class AIAgentCategoryOverviewPanel extends BaseFormPanel<MJAIAgen
|
|
|
12
12
|
private cdr;
|
|
13
13
|
Agents: AgentRow[];
|
|
14
14
|
ngOnInit(): void;
|
|
15
|
-
private
|
|
15
|
+
private loadCategoryAgents;
|
|
16
16
|
static ɵfac: i0.ɵɵFactoryDeclaration<AIAgentCategoryOverviewPanel, never>;
|
|
17
17
|
static ɵcmp: i0.ɵɵComponentDeclaration<AIAgentCategoryOverviewPanel, "mj-ai-agent-category-overview-panel", never, {}, {}, never, never, true, never>;
|
|
18
18
|
}
|
|
@@ -43,9 +43,9 @@ let AIAgentCategoryOverviewPanel = class AIAgentCategoryOverviewPanel extends Ba
|
|
|
43
43
|
this.Agents = [];
|
|
44
44
|
}
|
|
45
45
|
ngOnInit() {
|
|
46
|
-
this.
|
|
46
|
+
this.loadCategoryAgents();
|
|
47
47
|
}
|
|
48
|
-
async
|
|
48
|
+
async loadCategoryAgents() {
|
|
49
49
|
if (!this.Record?.ID)
|
|
50
50
|
return;
|
|
51
51
|
try {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ai-agent-category-overview.panel.js","sourceRoot":"","sources":["../../../../src/lib/custom/AIAgentCategories/ai-agent-category-overview.panel.ts"],"names":[],"mappings":"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","sourcesContent":["import { Component, ChangeDetectionStrategy, OnInit, inject, ChangeDetectorRef } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { RunView } from '@memberjunction/core';\nimport { RegisterClassEx } from '@memberjunction/global';\nimport { BaseFormPanel } from '@memberjunction/ng-base-forms';\nimport { MJAIAgentCategoryEntity } from '@memberjunction/core-entities';\n\ninterface AgentRow {\n ID: string;\n Name: string;\n Status: string;\n ExecutionModel: string;\n}\n\n@RegisterClassEx(BaseFormPanel, {\n key: 'form-panel:AI Agent Categories:overview',\n metadata: {\n entity: 'AI Agent Categories',\n slot: 'before-fields',\n sortKey: 10,\n },\n})\n@Component({\n selector: 'mj-ai-agent-category-overview-panel',\n standalone: true,\n imports: [CommonModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <div class=\"mj-category-overview-grid\">\n <!-- Card 1: Active Cluster Agents -->\n <div class=\"mj-overview-card\">\n <div class=\"mj-card-header\">\n <div class=\"mj-card-title\"><i class=\"fa-solid fa-robot\" style=\"color: var(--mj-brand-primary, #38bdf8);\"></i> Active Agents in Category</div>\n <span class=\"mj-card-badge\">{{ Agents.length }} Registered</span>\n </div>\n <div class=\"mj-card-body\">\n @if (Agents.length === 0) {\n <span style=\"font-size: 12px; color: var(--mj-text-muted);\">No agents assigned to this category yet.</span>\n } @else {\n @for (agent of Agents; track agent.ID) {\n <div class=\"mj-metric-row\">\n <span class=\"mj-metric-label\">{{ agent.Name }}</span>\n <span class=\"mj-pill mj-pill-green\">{{ agent.Status || 'Active' }}</span>\n </div>\n }\n }\n </div>\n </div>\n\n <!-- Card 2: Execution & Model Settings -->\n <div class=\"mj-overview-card\">\n <div class=\"mj-card-header\">\n <div class=\"mj-card-title\"><i class=\"fa-solid fa-microchip\" style=\"color: #a855f7;\"></i> Cluster Configuration</div>\n <span class=\"mj-card-badge\">Governance</span>\n </div>\n <div class=\"mj-card-body\">\n <div class=\"mj-metric-row\">\n <span class=\"mj-metric-label\">Execution Mode</span>\n <span class=\"mj-metric-val\">Parallel Cluster</span>\n </div>\n <div class=\"mj-metric-row\">\n <span class=\"mj-metric-label\">Default Execution Model</span>\n <span class=\"mj-metric-val\">Gemini 3.1 Flash-Lite</span>\n </div>\n <div class=\"mj-metric-row\">\n <span class=\"mj-metric-label\">Max Token Ceiling</span>\n <span class=\"mj-metric-val\">100,000 / run</span>\n </div>\n </div>\n </div>\n </div>\n `,\n styles: [`\n :host { display: block; width: 100%; margin-bottom: 20px; }\n .mj-category-overview-grid {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));\n gap: 16px;\n }\n .mj-overview-card {\n background: var(--mj-bg-surface-card, #141f36);\n border: 1px solid var(--mj-border-default, #223254);\n border-radius: 10px;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n }\n .mj-card-header {\n padding: 10px 14px;\n background: var(--mj-bg-surface, #111a2e);\n border-bottom: 1px solid var(--mj-border-default, #223254);\n display: flex;\n align-items: center;\n justify-content: space-between;\n }\n .mj-card-title {\n font-size: 12.5px;\n font-weight: 700;\n color: var(--mj-text-primary, #f8fafc);\n display: flex;\n align-items: center;\n gap: 8px;\n }\n .mj-card-badge {\n font-size: 11px;\n padding: 2px 7px;\n border-radius: 9999px;\n background: var(--mj-bg-surface-elevated, #1a2744);\n color: var(--mj-text-secondary, #94a3b8);\n border: 1px solid var(--mj-border-default, #223254);\n }\n .mj-card-body {\n padding: 14px;\n display: flex;\n flex-direction: column;\n gap: 10px;\n }\n .mj-metric-row {\n display: flex;\n align-items: center;\n justify-content: space-between;\n font-size: 12px;\n }\n .mj-metric-label { color: var(--mj-text-secondary, #94a3b8); }\n .mj-metric-val { font-weight: 600; color: var(--mj-text-primary, #f8fafc); font-family: monospace; }\n .mj-pill {\n font-size: 10.5px;\n font-weight: 700;\n padding: 2px 6px;\n border-radius: 4px;\n }\n .mj-pill-green { background: rgba(16, 185, 129, 0.15); color: #10b981; }\n `]\n})\nexport class AIAgentCategoryOverviewPanel extends BaseFormPanel<MJAIAgentCategoryEntity> implements OnInit {\n private cdr = inject(ChangeDetectorRef);\n public Agents: AgentRow[] = [];\n\n public ngOnInit(): void {\n this.
|
|
1
|
+
{"version":3,"file":"ai-agent-category-overview.panel.js","sourceRoot":"","sources":["../../../../src/lib/custom/AIAgentCategories/ai-agent-category-overview.panel.ts"],"names":[],"mappings":"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","sourcesContent":["import { Component, ChangeDetectionStrategy, OnInit, inject, ChangeDetectorRef } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { RunView } from '@memberjunction/core';\nimport { RegisterClassEx } from '@memberjunction/global';\nimport { BaseFormPanel } from '@memberjunction/ng-base-forms';\nimport { MJAIAgentCategoryEntity } from '@memberjunction/core-entities';\n\ninterface AgentRow {\n ID: string;\n Name: string;\n Status: string;\n ExecutionModel: string;\n}\n\n@RegisterClassEx(BaseFormPanel, {\n key: 'form-panel:AI Agent Categories:overview',\n metadata: {\n entity: 'AI Agent Categories',\n slot: 'before-fields',\n sortKey: 10,\n },\n})\n@Component({\n selector: 'mj-ai-agent-category-overview-panel',\n standalone: true,\n imports: [CommonModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <div class=\"mj-category-overview-grid\">\n <!-- Card 1: Active Cluster Agents -->\n <div class=\"mj-overview-card\">\n <div class=\"mj-card-header\">\n <div class=\"mj-card-title\"><i class=\"fa-solid fa-robot\" style=\"color: var(--mj-brand-primary, #38bdf8);\"></i> Active Agents in Category</div>\n <span class=\"mj-card-badge\">{{ Agents.length }} Registered</span>\n </div>\n <div class=\"mj-card-body\">\n @if (Agents.length === 0) {\n <span style=\"font-size: 12px; color: var(--mj-text-muted);\">No agents assigned to this category yet.</span>\n } @else {\n @for (agent of Agents; track agent.ID) {\n <div class=\"mj-metric-row\">\n <span class=\"mj-metric-label\">{{ agent.Name }}</span>\n <span class=\"mj-pill mj-pill-green\">{{ agent.Status || 'Active' }}</span>\n </div>\n }\n }\n </div>\n </div>\n\n <!-- Card 2: Execution & Model Settings -->\n <div class=\"mj-overview-card\">\n <div class=\"mj-card-header\">\n <div class=\"mj-card-title\"><i class=\"fa-solid fa-microchip\" style=\"color: #a855f7;\"></i> Cluster Configuration</div>\n <span class=\"mj-card-badge\">Governance</span>\n </div>\n <div class=\"mj-card-body\">\n <div class=\"mj-metric-row\">\n <span class=\"mj-metric-label\">Execution Mode</span>\n <span class=\"mj-metric-val\">Parallel Cluster</span>\n </div>\n <div class=\"mj-metric-row\">\n <span class=\"mj-metric-label\">Default Execution Model</span>\n <span class=\"mj-metric-val\">Gemini 3.1 Flash-Lite</span>\n </div>\n <div class=\"mj-metric-row\">\n <span class=\"mj-metric-label\">Max Token Ceiling</span>\n <span class=\"mj-metric-val\">100,000 / run</span>\n </div>\n </div>\n </div>\n </div>\n `,\n styles: [`\n :host { display: block; width: 100%; margin-bottom: 20px; }\n .mj-category-overview-grid {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));\n gap: 16px;\n }\n .mj-overview-card {\n background: var(--mj-bg-surface-card, #141f36);\n border: 1px solid var(--mj-border-default, #223254);\n border-radius: 10px;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n }\n .mj-card-header {\n padding: 10px 14px;\n background: var(--mj-bg-surface, #111a2e);\n border-bottom: 1px solid var(--mj-border-default, #223254);\n display: flex;\n align-items: center;\n justify-content: space-between;\n }\n .mj-card-title {\n font-size: 12.5px;\n font-weight: 700;\n color: var(--mj-text-primary, #f8fafc);\n display: flex;\n align-items: center;\n gap: 8px;\n }\n .mj-card-badge {\n font-size: 11px;\n padding: 2px 7px;\n border-radius: 9999px;\n background: var(--mj-bg-surface-elevated, #1a2744);\n color: var(--mj-text-secondary, #94a3b8);\n border: 1px solid var(--mj-border-default, #223254);\n }\n .mj-card-body {\n padding: 14px;\n display: flex;\n flex-direction: column;\n gap: 10px;\n }\n .mj-metric-row {\n display: flex;\n align-items: center;\n justify-content: space-between;\n font-size: 12px;\n }\n .mj-metric-label { color: var(--mj-text-secondary, #94a3b8); }\n .mj-metric-val { font-weight: 600; color: var(--mj-text-primary, #f8fafc); font-family: monospace; }\n .mj-pill {\n font-size: 10.5px;\n font-weight: 700;\n padding: 2px 6px;\n border-radius: 4px;\n }\n .mj-pill-green { background: rgba(16, 185, 129, 0.15); color: #10b981; }\n `]\n})\nexport class AIAgentCategoryOverviewPanel extends BaseFormPanel<MJAIAgentCategoryEntity> implements OnInit {\n private cdr = inject(ChangeDetectorRef);\n public Agents: AgentRow[] = [];\n\n public ngOnInit(): void {\n this.loadCategoryAgents();\n }\n\n private async loadCategoryAgents(): Promise<void> {\n if (!this.Record?.ID) return;\n try {\n const rv = new RunView();\n const res = await rv.RunView<AgentRow>({\n EntityName: 'AI Agents',\n ExtraFilter: `CategoryID = '${this.Record.ID}'`,\n Fields: ['ID', 'Name', 'Status'],\n MaxRows: 20,\n ResultType: 'simple'\n });\n if (res.Success && res.Results) {\n this.Agents = res.Results;\n this.cdr.markForCheck();\n }\n } catch (e) {\n console.error('Failed to load category agents:', e);\n }\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ai-agent-session-form.component.js","sourceRoot":"","sources":["../../../../src/lib/custom/AIAgentSessions/ai-agent-session-form.component.ts","../../../../src/lib/custom/AIAgentSessions/ai-agent-session-form.component.html"],"names":[],"mappings":"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","sourcesContent":["import { Component, OnInit, inject } from '@angular/core';\nimport { CompositeKey, RunView } from '@memberjunction/core';\nimport { MJAIAgentSessionEntity } from '@memberjunction/core-entities';\nimport { RegisterClass, UUIDsEqual } from '@memberjunction/global';\nimport { BaseFormComponent, CUSTOM_LAYOUT_TOOLBAR_CONFIG } from '@memberjunction/ng-base-forms';\nimport { SharedService, NavigationService } from '@memberjunction/ng-shared';\nimport { ApplicationManager } from '@memberjunction/ng-base-application';\nimport { MJAIAgentSessionFormComponent } from '../../generated/Entities/MJAIAgentSession/mjaiagentsession.form.component';\n\n/**\n * Authoritative shape persisted in `AIAgentSession.Config` for a client-direct\n * realtime voice session. Mirrors `RealtimeSessionConfig` on the server\n * (MJServer/RealtimeClientSessionResolver). All fields optional — non-voice\n * sessions may carry none of them.\n */\ninterface SessionConfigJson {\n targetAgentID?: string;\n coAgentRunID?: string;\n promptRunID?: string;\n}\n\n/** Date values arrive as ISO strings from `ResultType: 'simple'` RunViews. */\ntype DateLike = Date | string;\n\n/** Narrowed read-only row from 'MJ: AI Agent Runs' for the session run tree. */\ninterface SessionRunRow {\n ID: string;\n AgentID: string;\n Agent: string | null;\n ParentRunID: string | null;\n Status: string;\n StartedAt: DateLike;\n CompletedAt: DateLike | null;\n TotalTokensUsed: number | null;\n TotalCost: number | null;\n TotalTokensUsedRollup: number | null;\n TotalCostRollup: number | null;\n}\n\n/** Narrowed read-only row from 'MJ: AI Agent Session Channels'. */\ninterface SessionChannelRow {\n ID: string;\n ChannelID: string;\n Channel: string;\n Status: 'Connected' | 'Connecting' | 'Disconnected' | 'Paused';\n SocketUrl: string | null;\n __mj_CreatedAt: DateLike;\n LastActiveAt: DateLike;\n DisconnectedAt: DateLike | null;\n}\n\n/** Narrowed read-only row from 'MJ: AI Agent Channels' (definition lookup for transport). */\ninterface ChannelDefinitionRow {\n ID: string;\n Name: string;\n TransportType: string;\n}\n\n/** Narrowed read-only row from 'MJ: Conversation Details' for the transcript. */\ninterface TranscriptRow {\n ID: string;\n Role: 'User' | 'AI' | 'Error';\n Message: string;\n Agent: string | null;\n User: string | null;\n __mj_CreatedAt: DateLike;\n}\n\n/** Narrowed read-only row from 'MJ: AI Prompt Runs' (the co-agent model leg). */\ninterface CoAgentPromptRunRow {\n ID: string;\n Model: string;\n Status: string;\n RunAt: DateLike;\n CompletedAt: DateLike | null;\n TokensUsed: number | null;\n TokensPrompt: number | null;\n TokensCompletion: number | null;\n TotalCost: number | null;\n}\n\n/** A flattened node in the session run tree (depth-first order, indented by depth). */\nexport interface SessionRunTreeItem {\n /** 'run' = AIAgentRun row, 'promptRun' = the co-agent's streaming model leg */\n kind: 'run' | 'promptRun';\n id: string;\n entityName: string;\n title: string;\n subtitle: string;\n status: string;\n startedAt: DateLike | null;\n completedAt: DateLike | null;\n tokens: number | null;\n cost: number | null;\n depth: number;\n isCoAgentRun: boolean;\n}\n\n/** Channel row decorated with its definition's transport type for display. */\nexport interface SessionChannelDisplayRow {\n row: SessionChannelRow;\n transportType: string | null;\n}\n\n/**\n * Custom form for 'MJ: AI Agent Sessions' — the observability surface for\n * long-lived realtime (voice) agent sessions. Mirrors the AI Agent Run form's\n * visual language: header with icon / status badge / stats, config bar, and\n * tabbed panes for the delegated run tree, channels, transcript, and details.\n */\n@RegisterClass(BaseFormComponent, 'MJ: AI Agent Sessions')\n@Component({\n standalone: false,\n selector: 'mj-ai-agent-session-form',\n templateUrl: './ai-agent-session-form.component.html',\n styleUrls: ['./ai-agent-session-form.component.css']\n})\nexport class MJAIAgentSessionFormComponentExtended extends MJAIAgentSessionFormComponent implements OnInit {\n public record!: MJAIAgentSessionEntity;\n\n /** Hide the generated-section controls — this form has a fully custom layout. */\n public readonly ToolbarConfig = CUSTOM_LAYOUT_TOOLBAR_CONFIG;\n\n /** Sessions read best full-width, like the agent-run form. */\n public override getDefaultFormWidthMode(): 'centered' | 'full-width' { return 'full-width'; }\n\n // UI state\n public ActiveTab: 'runs' | 'channels' | 'transcript' | 'details' = 'runs';\n public Loading = false;\n public LoadError: string | null = null;\n\n // Loaded data\n public RunTree: SessionRunTreeItem[] = [];\n public Channels: SessionChannelDisplayRow[] = [];\n public Transcript: TranscriptRow[] = [];\n public DelegatedRunCount = 0;\n public TargetAgentID: string | null = null;\n public TargetAgentName: string | null = null;\n public CoAgentPromptRun: CoAgentPromptRunRow | null = null;\n public SessionTokens: number | null = null;\n public SessionCost: number | null = null;\n\n private sessionConfig: SessionConfigJson = {};\n private cachedPrettyConfig: string | null = null;\n\n private navigationService = inject(NavigationService);\n private appManager = inject(ApplicationManager);\n\n override async ngOnInit(): Promise<void> {\n await super.ngOnInit();\n if (this.record?.ID) {\n this.sessionConfig = this.parseSessionConfig(this.record.Config_);\n await this.loadSessionData();\n }\n }\n\n // ────────────────────────────────────────────────────────────────────\n // Data loading\n // ────────────────────────────────────────────────────────────────────\n\n /** Parses the session's Config JSON; returns an empty config on any error. */\n private parseSessionConfig(raw: string | null): SessionConfigJson {\n if (!raw) return {};\n try {\n const parsed = JSON.parse(raw) as Partial<SessionConfigJson>;\n return {\n targetAgentID: typeof parsed.targetAgentID === 'string' ? parsed.targetAgentID : undefined,\n coAgentRunID: typeof parsed.coAgentRunID === 'string' ? parsed.coAgentRunID : undefined,\n promptRunID: typeof parsed.promptRunID === 'string' ? parsed.promptRunID : undefined\n };\n } catch {\n return {};\n }\n }\n\n /**\n * Loads everything the form shows in a single batched RunViews round trip:\n * the session's run tree, its channel instances (+ channel definitions for\n * transport), the transcript, and — when the Config carries observability\n * ids — the co-agent prompt run and target agent name.\n */\n private async loadSessionData(): Promise<void> {\n this.Loading = true;\n this.LoadError = null;\n try {\n const rv = RunView.FromMetadataProvider(this.ProviderToUse);\n const sessionId = this.record.ID;\n\n const results = await rv.RunViews([\n {\n EntityName: 'MJ: AI Agent Runs',\n Fields: ['ID', 'AgentID', 'Agent', 'ParentRunID', 'Status', 'StartedAt', 'CompletedAt',\n 'TotalTokensUsed', 'TotalCost', 'TotalTokensUsedRollup', 'TotalCostRollup'],\n ExtraFilter: `AgentSessionID='${sessionId}'`,\n OrderBy: 'StartedAt ASC',\n ResultType: 'simple'\n },\n {\n EntityName: 'MJ: AI Agent Session Channels',\n Fields: ['ID', 'ChannelID', 'Channel', 'Status', 'SocketUrl', '__mj_CreatedAt', 'LastActiveAt', 'DisconnectedAt'],\n ExtraFilter: `AgentSessionID='${sessionId}'`,\n OrderBy: '__mj_CreatedAt ASC',\n ResultType: 'simple'\n },\n {\n EntityName: 'MJ: AI Agent Channels',\n Fields: ['ID', 'Name', 'TransportType'],\n ResultType: 'simple'\n },\n {\n EntityName: 'MJ: Conversation Details',\n Fields: ['ID', 'Role', 'Message', 'Agent', 'User', '__mj_CreatedAt'],\n ExtraFilter: `AgentSessionID='${sessionId}'`,\n OrderBy: '__mj_CreatedAt ASC',\n ResultType: 'simple'\n },\n // Co-agent model leg — only meaningful when Config carries promptRunID;\n // an impossible filter keeps the batch shape stable when it doesn't.\n {\n EntityName: 'MJ: AI Prompt Runs',\n Fields: ['ID', 'Model', 'Status', 'RunAt', 'CompletedAt', 'TokensUsed', 'TokensPrompt', 'TokensCompletion', 'TotalCost'],\n ExtraFilter: this.sessionConfig.promptRunID ? `ID='${this.sessionConfig.promptRunID}'` : `1=0`,\n ResultType: 'simple'\n },\n // Target agent name resolution from Config.targetAgentID\n {\n EntityName: 'MJ: AI Agents',\n Fields: ['ID', 'Name'],\n ExtraFilter: this.sessionConfig.targetAgentID ? `ID='${this.sessionConfig.targetAgentID}'` : `1=0`,\n ResultType: 'simple'\n }\n ]);\n\n const runs = (results[0]?.Success ? results[0].Results : []) as SessionRunRow[];\n const channelRows = (results[1]?.Success ? results[1].Results : []) as SessionChannelRow[];\n const channelDefs = (results[2]?.Success ? results[2].Results : []) as ChannelDefinitionRow[];\n this.Transcript = (results[3]?.Success ? results[3].Results : []) as TranscriptRow[];\n const promptRuns = (results[4]?.Success ? results[4].Results : []) as CoAgentPromptRunRow[];\n const targetAgents = (results[5]?.Success ? results[5].Results : []) as { ID: string; Name: string }[];\n\n this.CoAgentPromptRun = promptRuns.length > 0 ? promptRuns[0] : null;\n this.TargetAgentID = this.sessionConfig.targetAgentID ?? null;\n this.TargetAgentName = targetAgents.length > 0 ? targetAgents[0].Name : null;\n\n this.Channels = channelRows.map(row => ({\n row,\n transportType: channelDefs.find(d => UUIDsEqual(d.ID, row.ChannelID))?.TransportType ?? null\n }));\n\n this.RunTree = this.buildRunTree(runs);\n this.DelegatedRunCount = runs.filter(r => r.ParentRunID != null).length;\n this.computeSessionUsage(runs);\n } catch (error) {\n console.error('Error loading agent session data:', error);\n this.LoadError = 'Failed to load session data';\n } finally {\n this.Loading = false;\n this.cdr.markForCheck();\n }\n }\n\n /**\n * Flattens the session's runs into a depth-first tree: root runs (no\n * ParentRunID, or parent outside the session) first, children nested by\n * ParentRunID. The co-agent run (Config.coAgentRunID) gets its streaming\n * prompt run inserted directly beneath it as a 'promptRun' leg.\n */\n private buildRunTree(runs: SessionRunRow[]): SessionRunTreeItem[] {\n const items: SessionRunTreeItem[] = [];\n const byParent = new Map<string, SessionRunRow[]>();\n const idSet = new Set(runs.map(r => r.ID.toUpperCase()));\n\n const roots: SessionRunRow[] = [];\n for (const run of runs) {\n if (run.ParentRunID && idSet.has(run.ParentRunID.toUpperCase())) {\n const key = run.ParentRunID.toUpperCase();\n const list = byParent.get(key) ?? [];\n list.push(run);\n byParent.set(key, list);\n } else {\n roots.push(run);\n }\n }\n\n const visit = (run: SessionRunRow, depth: number): void => {\n const isCoAgent = this.sessionConfig.coAgentRunID != null && UUIDsEqual(run.ID, this.sessionConfig.coAgentRunID);\n items.push(this.runToTreeItem(run, depth, isCoAgent));\n if (isCoAgent && this.CoAgentPromptRun) {\n items.push(this.promptRunToTreeItem(this.CoAgentPromptRun, depth + 1));\n }\n for (const child of byParent.get(run.ID.toUpperCase()) ?? []) {\n visit(child, depth + 1);\n }\n };\n for (const root of roots) {\n visit(root, 0);\n }\n return items;\n }\n\n private runToTreeItem(run: SessionRunRow, depth: number, isCoAgent: boolean): SessionRunTreeItem {\n const shortId = run.ID.substring(0, 8);\n return {\n kind: 'run',\n id: run.ID,\n entityName: 'MJ: AI Agent Runs',\n title: isCoAgent\n ? `${run.Agent ?? 'Co-Agent'} · session run`\n : `${run.Agent ?? 'Agent'} · delegated run`,\n subtitle: isCoAgent\n ? `AIAgentRun #${shortId} · one long-lived run for this session`\n : `AIAgentRun #${shortId} · ParentRunID #${run.ParentRunID?.substring(0, 8) ?? '—'} · invoked via target-agent tool`,\n status: run.Status,\n startedAt: run.StartedAt,\n completedAt: run.CompletedAt,\n tokens: run.TotalTokensUsedRollup ?? run.TotalTokensUsed,\n cost: run.TotalCostRollup ?? run.TotalCost,\n depth,\n isCoAgentRun: isCoAgent\n };\n }\n\n private promptRunToTreeItem(pr: CoAgentPromptRunRow, depth: number): SessionRunTreeItem {\n return {\n kind: 'promptRun',\n id: pr.ID,\n entityName: 'MJ: AI Prompt Runs',\n title: `Model leg · ${pr.Model}`,\n subtitle: `AIPromptRun #${pr.ID.substring(0, 8)} · ${pr.TokensPrompt ?? 0} in · ${pr.TokensCompletion ?? 0} out · usage checkpointed incrementally`,\n status: pr.Status,\n startedAt: pr.RunAt,\n completedAt: pr.CompletedAt,\n tokens: pr.TokensUsed,\n cost: pr.TotalCost,\n depth,\n isCoAgentRun: false\n };\n }\n\n /**\n * Session-level tokens/cost for the header stats: prefer the co-agent run's\n * rollups (covers delegated children), fall back to the prompt run's\n * incremental usage when the run rollups haven't been finalized yet.\n */\n private computeSessionUsage(runs: SessionRunRow[]): void {\n const coAgentRun = this.sessionConfig.coAgentRunID\n ? runs.find(r => UUIDsEqual(r.ID, this.sessionConfig.coAgentRunID)) ?? null\n : null;\n const runTokens = coAgentRun ? (coAgentRun.TotalTokensUsedRollup ?? coAgentRun.TotalTokensUsed) : null;\n const runCost = coAgentRun ? (coAgentRun.TotalCostRollup ?? coAgentRun.TotalCost) : null;\n this.SessionTokens = runTokens ?? this.CoAgentPromptRun?.TokensUsed ?? null;\n this.SessionCost = runCost ?? this.CoAgentPromptRun?.TotalCost ?? null;\n }\n\n // ────────────────────────────────────────────────────────────────────\n // Display helpers\n // ────────────────────────────────────────────────────────────────────\n\n public ChangeTab(tab: 'runs' | 'channels' | 'transcript' | 'details'): void {\n this.ActiveTab = tab;\n }\n\n public GetStatusIcon(status: string | null): string {\n switch (status) {\n case 'Active': return 'fa-tower-broadcast';\n case 'Idle': return 'fa-moon';\n case 'Closed': return 'fa-circle-stop';\n default: return 'fa-question-circle';\n }\n }\n\n public GetRunStatusIcon(status: string): string {\n switch (status) {\n case 'Running': return 'fa-circle-notch fa-spin';\n case 'Completed': return 'fa-check-circle';\n case 'Failed': return 'fa-times-circle';\n case 'Cancelled': return 'fa-ban';\n case 'Paused': return 'fa-pause-circle';\n case 'AwaitingFeedback': return 'fa-hourglass-half';\n case 'Pending': return 'fa-clock';\n default: return 'fa-question-circle';\n }\n }\n\n public GetChannelIcon(channelName: string | null): string {\n switch (channelName) {\n case 'VoiceAudio': return 'fa-microphone-lines';\n case 'TextChat': return 'fa-comment';\n case 'ClientControl': return 'fa-sliders';\n case 'Whiteboard': return 'fa-chalkboard';\n case 'Video': return 'fa-video';\n default: return 'fa-plug';\n }\n }\n\n /** Short, readable session id (first segment of the UUID). */\n public get ShortSessionId(): string {\n return this.record?.ID ? `sess_${this.record.ID.substring(0, 8).toLowerCase()}` : '';\n }\n\n /** Created → ClosedAt (terminal) or LastActiveAt (still open) duration. */\n public get SessionDuration(): string {\n if (!this.record) return '';\n const start = this.toDate(this.record.__mj_CreatedAt);\n const end = this.toDate(this.record.ClosedAt) ?? this.toDate(this.record.LastActiveAt);\n if (!start || !end) return '—';\n return this.FormatDuration(start, end);\n }\n\n public FormatDuration(start: DateLike | null, end: DateLike | null): string {\n const s = this.toDate(start);\n const e = this.toDate(end);\n if (!s) return '—';\n if (!e) return 'Running...';\n const ms = e.getTime() - s.getTime();\n if (ms < 0) return '—';\n if (ms < 1000) return `${ms}ms`;\n if (ms < 60000) return `${(ms / 1000).toFixed(1)}s`;\n if (ms < 3600000) return `${Math.floor(ms / 60000)}m ${Math.floor((ms % 60000) / 1000)}s`;\n return `${Math.floor(ms / 3600000)}h ${Math.floor((ms % 3600000) / 60000)}m`;\n }\n\n private toDate(value: DateLike | null | undefined): Date | null {\n if (value == null) return null;\n const d = value instanceof Date ? value : new Date(value);\n return isNaN(d.getTime()) ? null : d;\n }\n\n /** Pretty-printed session Config JSON for the Details tab (cached). */\n public get PrettyConfig(): string {\n if (!this.record?.Config_) return '';\n if (this.cachedPrettyConfig !== null) return this.cachedPrettyConfig;\n try {\n this.cachedPrettyConfig = JSON.stringify(JSON.parse(this.record.Config_), null, 2);\n } catch {\n this.cachedPrettyConfig = this.record.Config_;\n }\n return this.cachedPrettyConfig;\n }\n\n // ────────────────────────────────────────────────────────────────────\n // Navigation\n // ────────────────────────────────────────────────────────────────────\n\n public OpenEntityRecord(entityName: string, recordId: string | null): void {\n if (recordId) {\n SharedService.Instance.OpenEntityRecord(entityName, CompositeKey.FromURLSegment(this.ProviderToUse.EntityByName(entityName), recordId));\n }\n }\n\n /** Opens the linked conversation in the Chat app (same pattern as the agent-run form). */\n public NavigateToConversation(): void {\n if (!this.record?.ConversationID) return;\n const chatApp = this.appManager.GetAllApps().find(app => app.Name === 'Chat');\n if (!chatApp) {\n // Fall back to the raw conversation record when the Chat app isn't installed\n this.OpenEntityRecord('MJ: Conversations', this.record.ConversationID);\n return;\n }\n this.navigationService.OpenNavItemByName(\n 'Conversations',\n // realtimeSessionId opens the SESSION REVIEW overlay directly on arrival\n // (the chat wrapper consumes it once) — not just the containing chat.\n { conversationId: this.record.ConversationID, realtimeSessionId: this.record.ID },\n chatApp.ID\n );\n }\n\n public RefreshData(): void {\n if (!this.record?.ID) return;\n this.cachedPrettyConfig = null;\n this.record.Load(this.record.ID).then(() => {\n this.sessionConfig = this.parseSessionConfig(this.record.Config_);\n void this.loadSessionData();\n });\n }\n}\n","@if (record) {\n<mj-record-form-container [Record]=\"record\" [FormComponent]=\"this\"\n [ToolbarConfig]=\"ToolbarConfig\"\n [WidthMode]=\"'full-width'\"\n (Navigate)=\"OnFormNavigate($event)\"\n (DeleteRequested)=\"OnDeleteRequested()\"\n (FavoriteToggled)=\"OnFavoriteToggled()\"\n (HistoryRequested)=\"OnHistoryRequested()\"\n (ListManagementRequested)=\"OnListManagementRequested()\">\n\n <div class=\"record-form ai-agent-session-form\">\n <!-- Header (mirrors the AI Agent Run form header) -->\n <div class=\"header\">\n <div class=\"header-content\">\n <div class=\"header-left\">\n <div class=\"icon-wrapper\">\n <i class=\"fas fa-tower-broadcast\"></i>\n </div>\n <div class=\"header-info\">\n <h2>AI Agent Session</h2>\n <div class=\"meta-info\">\n @if (record.AgentID) {\n <span class=\"agent-name\">\n <a href=\"javascript:void(0)\" class=\"entity-link\" (click)=\"OpenEntityRecord('AI Agents', record.AgentID)\">\n {{ record.Agent || 'Agent' }}\n </a>\n </span>\n }\n @if (TargetAgentID) {\n <i class=\"fas fa-arrow-right-long target-arrow\"></i>\n <span class=\"agent-name\">\n <a href=\"javascript:void(0)\" class=\"entity-link\" (click)=\"OpenEntityRecord('AI Agents', TargetAgentID)\">\n {{ TargetAgentName || 'Target agent' }}\n </a>\n </span>\n }\n <span class=\"run-id\">{{ ShortSessionId }}</span>\n @if (record.ConversationID) {\n <span class=\"conversation-pill\" (click)=\"NavigateToConversation()\" title=\"Open conversation in Chat app\">\n <i class=\"fas fa-comments\"></i>\n <span>{{ record.Conversation || 'Conversation' }}</span>\n <i class=\"fas fa-external-link-alt pill-action\"></i>\n </span>\n }\n </div>\n </div>\n </div>\n <div class=\"header-right\">\n <div class=\"status-badge\" [attr.data-status]=\"record.Status\">\n <i class=\"fas\" [ngClass]=\"GetStatusIcon(record.Status)\"></i>\n {{ record.Status }}\n </div>\n <div class=\"header-actions\">\n <button class=\"btn-icon\" (click)=\"RefreshData()\" title=\"Refresh\">\n <i class=\"fas fa-sync-alt\"></i>\n </button>\n </div>\n </div>\n </div>\n\n <div class=\"header-stats\">\n <div class=\"stat\">\n <span class=\"label\">User</span>\n <span class=\"value\">\n <a href=\"javascript:void(0)\" class=\"entity-link\" (click)=\"OpenEntityRecord('Users', record.UserID)\">{{ record.User }}</a>\n </span>\n </div>\n <div class=\"stat\">\n <span class=\"label\">Started</span>\n <span class=\"value\">{{ record.__mj_CreatedAt | date:'medium' }}</span>\n </div>\n @if (record.ClosedAt) {\n <div class=\"stat\">\n <span class=\"label\">Closed</span>\n <span class=\"value\">{{ record.ClosedAt | date:'medium' }}</span>\n </div>\n } @else {\n <div class=\"stat\">\n <span class=\"label\">Last Active</span>\n <span class=\"value\">{{ record.LastActiveAt | date:'medium' }}</span>\n </div>\n }\n <div class=\"stat\">\n <span class=\"label\">Duration</span>\n <span class=\"value\">{{ SessionDuration }}</span>\n </div>\n <div class=\"stat\">\n <span class=\"label\">Channels</span>\n <span class=\"value\">{{ Channels.length }}</span>\n </div>\n <div class=\"stat\">\n <span class=\"label\">Delegated Runs</span>\n <span class=\"value\">{{ DelegatedRunCount }}</span>\n </div>\n @if (SessionTokens != null && SessionTokens > 0) {\n <div class=\"stat\">\n <span class=\"label\">Tokens</span>\n <span class=\"value\">{{ SessionTokens | number:'1.0-0' }}</span>\n </div>\n }\n @if (SessionCost != null && SessionCost > 0) {\n <div class=\"stat\">\n <span class=\"label\">Cost</span>\n <span class=\"value success\">${{ SessionCost | number:'1.2-4' }}</span>\n </div>\n }\n </div>\n\n <!-- Config bar: target agent / host instance / continuation -->\n <div class=\"configuration-bar\">\n <div class=\"config-item\">\n <i class=\"fas fa-bullseye\"></i>\n <div class=\"config-content\">\n <div class=\"config-label\">Target Agent</div>\n <div class=\"config-value\">\n @if (TargetAgentID) {\n <a href=\"javascript:void(0)\" class=\"entity-link\" (click)=\"OpenEntityRecord('AI Agents', TargetAgentID)\">\n {{ TargetAgentName || 'Unknown' }}\n </a>\n } @else {\n <span class=\"muted\">None</span>\n }\n </div>\n </div>\n </div>\n <div class=\"config-item\">\n <i class=\"fas fa-server\"></i>\n <div class=\"config-content\">\n <div class=\"config-label\">Host Instance</div>\n <div class=\"config-value mono\">{{ record.HostInstanceID || '—' }}</div>\n </div>\n </div>\n <div class=\"config-item\">\n <i class=\"fas fa-link\"></i>\n <div class=\"config-content\">\n <div class=\"config-label\">Continuation</div>\n <div class=\"config-value\">\n @if (record.LastSessionID) {\n <a href=\"javascript:void(0)\" class=\"entity-link\" (click)=\"OpenEntityRecord('MJ: AI Agent Sessions', record.LastSessionID)\">\n Resumed from prior session\n </a>\n } @else {\n <span class=\"muted\">None (new session)</span>\n }\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Tabs -->\n <div class=\"tabs\">\n <button class=\"tab\" [class.active]=\"ActiveTab === 'runs'\" (click)=\"ChangeTab('runs')\">\n <i class=\"fas fa-diagram-project\"></i> Runs\n @if (RunTree.length > 0) { <span class=\"tab-count\">{{ RunTree.length }}</span> }\n </button>\n <button class=\"tab\" [class.active]=\"ActiveTab === 'channels'\" (click)=\"ChangeTab('channels')\">\n <i class=\"fas fa-plug\"></i> Channels\n @if (Channels.length > 0) { <span class=\"tab-count\">{{ Channels.length }}</span> }\n </button>\n <button class=\"tab\" [class.active]=\"ActiveTab === 'transcript'\" (click)=\"ChangeTab('transcript')\">\n <i class=\"fas fa-comments\"></i> Transcript\n @if (Transcript.length > 0) { <span class=\"tab-count\">{{ Transcript.length }}</span> }\n </button>\n <button class=\"tab\" [class.active]=\"ActiveTab === 'details'\" (click)=\"ChangeTab('details')\">\n <i class=\"fas fa-info-circle\"></i> Details\n </button>\n </div>\n\n <!-- Content -->\n <div class=\"content-area\">\n @if (Loading) {\n <mj-loading text=\"Loading session data...\" size=\"medium\"></mj-loading>\n } @else if (LoadError) {\n <mj-empty-state\n Variant=\"error\"\n [Message]=\"LoadError\" />\n } @else {\n\n <!-- Runs tab: the session's delegated run tree -->\n @if (ActiveTab === 'runs') {\n <div class=\"tab-content\">\n @if (RunTree.length === 0) {\n <mj-empty-state\n Icon=\"fa-solid fa-diagram-project\"\n Title=\"No Runs\"\n Message=\"No agent runs have been recorded for this session yet.\" />\n } @else {\n <div class=\"run-tree\">\n @for (node of RunTree; track node.id) {\n <div class=\"run-node\"\n [class.run-node--child]=\"node.depth > 0\"\n [style.margin-left.px]=\"node.depth * 36\"\n (click)=\"OpenEntityRecord(node.entityName, node.id)\"\n title=\"Open record\">\n <div class=\"run-marker\"\n [class.run-marker--coagent]=\"node.isCoAgentRun\"\n [class.run-marker--prompt]=\"node.kind === 'promptRun'\">\n @if (node.kind === 'promptRun') {\n <i class=\"fas fa-microchip\"></i>\n } @else if (node.isCoAgentRun) {\n <i class=\"fas fa-tower-broadcast\"></i>\n } @else {\n <i class=\"fas fa-robot\"></i>\n }\n </div>\n <div class=\"run-body\">\n <div class=\"run-headrow\">\n <h4 class=\"run-title\">{{ node.title }}</h4>\n <span class=\"run-time\">{{ node.startedAt | date:'h:mm:ss a' }}</span>\n </div>\n <div class=\"run-sub\">{{ node.subtitle }}</div>\n <div class=\"run-foot\">\n <span class=\"run-status\" [attr.data-status]=\"node.status\">\n <i class=\"fas\" [ngClass]=\"GetRunStatusIcon(node.status)\"></i> {{ node.status }}\n </span>\n <span class=\"run-chip\">\n <i class=\"fas fa-clock\"></i> {{ FormatDuration(node.startedAt, node.completedAt) }}\n </span>\n @if (node.tokens != null && node.tokens > 0) {\n <span class=\"run-chip\"><i class=\"fas fa-coins\"></i> {{ node.tokens | number:'1.0-0' }} tok</span>\n }\n @if (node.cost != null && node.cost > 0) {\n <span class=\"run-chip\"><i class=\"fas fa-dollar-sign\"></i> {{ node.cost | number:'1.2-4' }}</span>\n }\n </div>\n </div>\n </div>\n }\n </div>\n }\n </div>\n }\n\n <!-- Channels tab -->\n @if (ActiveTab === 'channels') {\n <div class=\"tab-content\">\n @if (Channels.length === 0) {\n <mj-empty-state\n Icon=\"fa-solid fa-plug\"\n Title=\"No Channels\"\n Message=\"No channel instances were attached to this session.\" />\n } @else {\n <div class=\"channels-grid-wrap\">\n <table class=\"channels-grid\">\n <thead>\n <tr>\n <th>Channel</th>\n <th>Transport</th>\n <th>Status</th>\n <th>Connected</th>\n <th>Last Active</th>\n <th>Disconnected</th>\n <th>Socket</th>\n </tr>\n </thead>\n <tbody>\n @for (channel of Channels; track channel.row.ID) {\n <tr (click)=\"OpenEntityRecord('MJ: AI Agent Session Channels', channel.row.ID)\" title=\"Open record\">\n <td>\n <span class=\"cell-strong\">\n <i class=\"fas\" [ngClass]=\"GetChannelIcon(channel.row.Channel)\"></i>\n {{ channel.row.Channel }}\n </span>\n </td>\n <td>\n @if (channel.transportType) {\n <span class=\"transport-pill\" [attr.data-transport]=\"channel.transportType\">{{ channel.transportType }}</span>\n } @else {\n <span class=\"muted\">—</span>\n }\n </td>\n <td>\n <span class=\"channel-status-pill\" [attr.data-status]=\"channel.row.Status\">{{ channel.row.Status }}</span>\n </td>\n <td class=\"mono\">{{ channel.row.__mj_CreatedAt | date:'h:mm:ss a' }}</td>\n <td class=\"mono\">{{ channel.row.LastActiveAt | date:'h:mm:ss a' }}</td>\n <td class=\"mono\">\n @if (channel.row.DisconnectedAt) {\n {{ channel.row.DisconnectedAt | date:'h:mm:ss a' }}\n } @else {\n <span class=\"muted\">—</span>\n }\n </td>\n <td class=\"mono socket-cell\" [title]=\"channel.row.SocketUrl || ''\">\n {{ channel.row.SocketUrl || '—' }}\n </td>\n </tr>\n }\n </tbody>\n </table>\n </div>\n }\n </div>\n }\n\n <!-- Transcript tab -->\n @if (ActiveTab === 'transcript') {\n <div class=\"tab-content\">\n @if (Transcript.length === 0) {\n <mj-empty-state\n Icon=\"fa-solid fa-comments\"\n Title=\"No Transcript\"\n Message=\"No conversation messages were stamped with this session.\" />\n } @else {\n <div class=\"transcript-thread\">\n @for (turn of Transcript; track turn.ID) {\n <div class=\"turn\" [class.turn--user]=\"turn.Role === 'User'\" [class.turn--error]=\"turn.Role === 'Error'\">\n <div class=\"turn-avatar\">\n @if (turn.Role === 'User') {\n <i class=\"fas fa-user\"></i>\n } @else if (turn.Role === 'Error') {\n <i class=\"fas fa-triangle-exclamation\"></i>\n } @else {\n <i class=\"fas fa-robot\"></i>\n }\n </div>\n <div class=\"turn-main\">\n <div class=\"turn-meta\">\n @if (turn.Role === 'User') {\n {{ turn.User || 'User' }}\n } @else {\n {{ turn.Agent || 'Agent' }}\n }\n <span class=\"turn-time\">{{ turn.__mj_CreatedAt | date:'h:mm:ss a' }}</span>\n </div>\n <div class=\"turn-bubble\">{{ turn.Message }}</div>\n </div>\n </div>\n }\n </div>\n }\n </div>\n }\n\n <!-- Details tab -->\n @if (ActiveTab === 'details') {\n <div class=\"tab-content\">\n <mj-accordion-panel [Expanded]=\"true\">\n <ng-template mjAccordionTitle>\n <i class=\"fas fa-info-circle\"></i> Session Record\n </ng-template>\n <div class=\"details-grid\">\n <div class=\"detail-item\">\n <label>ID</label>\n <span class=\"mono\">{{ record.ID }}</span>\n </div>\n <div class=\"detail-item\">\n <label>Agent (Co-Agent)</label>\n <span>\n <a href=\"javascript:void(0)\" class=\"entity-link\" (click)=\"OpenEntityRecord('AI Agents', record.AgentID)\">\n {{ record.Agent || 'N/A' }}\n </a>\n </span>\n </div>\n <div class=\"detail-item\">\n <label>User</label>\n <span>\n <a href=\"javascript:void(0)\" class=\"entity-link\" (click)=\"OpenEntityRecord('Users', record.UserID)\">\n {{ record.User }}\n </a>\n </span>\n </div>\n <div class=\"detail-item\">\n <label>Conversation</label>\n <span>\n @if (record.ConversationID) {\n <a href=\"javascript:void(0)\" class=\"entity-link\" (click)=\"OpenEntityRecord('MJ: Conversations', record.ConversationID)\">\n {{ record.Conversation || record.ConversationID }}\n </a>\n } @else {\n <span>N/A</span>\n }\n </span>\n </div>\n <div class=\"detail-item\">\n <label>Status</label>\n <span class=\"status-badge small\" [attr.data-status]=\"record.Status\">{{ record.Status }}</span>\n </div>\n <div class=\"detail-item\">\n <label>Prior Session</label>\n <span>\n @if (record.LastSessionID) {\n <a href=\"javascript:void(0)\" class=\"entity-link\" (click)=\"OpenEntityRecord('MJ: AI Agent Sessions', record.LastSessionID)\">\n {{ record.LastSessionID }}\n </a>\n } @else {\n <span>None (root)</span>\n }\n </span>\n </div>\n <div class=\"detail-item\">\n <label>Host Instance</label>\n <span class=\"mono\">{{ record.HostInstanceID || 'N/A' }}</span>\n </div>\n <div class=\"detail-item\">\n <label>Last Active At</label>\n <span>{{ record.LastActiveAt | date:'medium' }}</span>\n </div>\n <div class=\"detail-item\">\n <label>Closed At</label>\n <span>{{ record.ClosedAt ? (record.ClosedAt | date:'medium') : 'Still open' }}</span>\n </div>\n </div>\n </mj-accordion-panel>\n\n @if (record.Config_) {\n <mj-accordion-panel [Expanded]=\"false\">\n <ng-template mjAccordionTitle>\n <i class=\"fas fa-code\"></i> Config (Session State JSON)\n </ng-template>\n <div class=\"config-viewer\">\n <mj-code-editor\n [ngModel]=\"PrettyConfig\"\n [language]=\"'json'\"\n [readonly]=\"true\"\n style=\"height: 300px; width: 100%;\">\n </mj-code-editor>\n </div>\n </mj-accordion-panel>\n }\n </div>\n }\n }\n </div>\n </div>\n</mj-record-form-container>\n}\n"]}
|
|
1
|
+
{"version":3,"file":"ai-agent-session-form.component.js","sourceRoot":"","sources":["../../../../src/lib/custom/AIAgentSessions/ai-agent-session-form.component.ts","../../../../src/lib/custom/AIAgentSessions/ai-agent-session-form.component.html"],"names":[],"mappings":"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","sourcesContent":["import { Component, OnInit, inject } from '@angular/core';\nimport { CompositeKey, RunView } from '@memberjunction/core';\nimport { MJAIAgentSessionEntity } from '@memberjunction/core-entities';\nimport { RegisterClass, UUIDsEqual } from '@memberjunction/global';\nimport { BaseFormComponent, CUSTOM_LAYOUT_TOOLBAR_CONFIG } from '@memberjunction/ng-base-forms';\nimport { SharedService, NavigationService } from '@memberjunction/ng-shared';\nimport { ApplicationManager } from '@memberjunction/ng-base-application';\nimport { MJAIAgentSessionFormComponent } from '../../generated/Entities/MJAIAgentSession/mjaiagentsession.form.component';\n\n/**\n * Authoritative shape persisted in `AIAgentSession.Config` for a client-direct\n * realtime voice session. Mirrors `RealtimeSessionConfig` on the server\n * (MJServer/RealtimeClientSessionResolver). All fields optional — non-voice\n * sessions may carry none of them.\n */\ninterface SessionConfigJson {\n targetAgentID?: string;\n coAgentRunID?: string;\n promptRunID?: string;\n}\n\n/** Date values arrive as ISO strings from `ResultType: 'simple'` RunViews. */\ntype DateLike = Date | string;\n\n/** Narrowed read-only row from 'MJ: AI Agent Runs' for the session run tree. */\ninterface SessionRunRow {\n ID: string;\n AgentID: string;\n Agent: string | null;\n ParentRunID: string | null;\n Status: string;\n StartedAt: DateLike;\n CompletedAt: DateLike | null;\n TotalTokensUsed: number | null;\n TotalCost: number | null;\n TotalTokensUsedRollup: number | null;\n TotalCostRollup: number | null;\n}\n\n/** Narrowed read-only row from 'MJ: AI Agent Session Channels'. */\ninterface SessionChannelRow {\n ID: string;\n ChannelID: string;\n Channel: string;\n Status: 'Connected' | 'Connecting' | 'Disconnected' | 'Paused';\n SocketUrl: string | null;\n __mj_CreatedAt: DateLike;\n LastActiveAt: DateLike;\n DisconnectedAt: DateLike | null;\n}\n\n/** Narrowed read-only row from 'MJ: AI Agent Channels' (definition lookup for transport). */\ninterface ChannelDefinitionRow {\n ID: string;\n Name: string;\n TransportType: string;\n}\n\n/** Narrowed read-only row from 'MJ: Conversation Details' for the transcript. */\ninterface TranscriptRow {\n ID: string;\n Role: 'User' | 'AI' | 'Error';\n Message: string;\n Agent: string | null;\n User: string | null;\n __mj_CreatedAt: DateLike;\n}\n\n/** Narrowed read-only row from 'MJ: AI Prompt Runs' (the co-agent model leg). */\ninterface CoAgentPromptRunRow {\n ID: string;\n Model: string;\n Status: string;\n RunAt: DateLike;\n CompletedAt: DateLike | null;\n TokensUsed: number | null;\n TokensPrompt: number | null;\n TokensCompletion: number | null;\n TotalCost: number | null;\n}\n\n/** A flattened node in the session run tree (depth-first order, indented by depth). */\nexport interface SessionRunTreeItem {\n /** 'run' = AIAgentRun row, 'promptRun' = the co-agent's streaming model leg */\n kind: 'run' | 'promptRun'; // case-violation-ok-legacy-back-compat: the type is named in an exported signature, so consumers build object literals against it; an interface has no runtime carrier for a stub\n id: string; // case-violation-ok-legacy-back-compat: the type is named in an exported signature, so consumers build object literals against it; an interface has no runtime carrier for a stub\n entityName: string; // case-violation-ok-legacy-back-compat: the type is named in an exported signature, so consumers build object literals against it; an interface has no runtime carrier for a stub\n title: string; // case-violation-ok-legacy-back-compat: the type is named in an exported signature, so consumers build object literals against it; an interface has no runtime carrier for a stub\n subtitle: string; // case-violation-ok-legacy-back-compat: the type is named in an exported signature, so consumers build object literals against it; an interface has no runtime carrier for a stub\n status: string; // case-violation-ok-legacy-back-compat: the type is named in an exported signature, so consumers build object literals against it; an interface has no runtime carrier for a stub\n startedAt: DateLike | null; // case-violation-ok-legacy-back-compat: the type is named in an exported signature, so consumers build object literals against it; an interface has no runtime carrier for a stub\n completedAt: DateLike | null; // case-violation-ok-legacy-back-compat: the type is named in an exported signature, so consumers build object literals against it; an interface has no runtime carrier for a stub\n tokens: number | null; // case-violation-ok-legacy-back-compat: the type is named in an exported signature, so consumers build object literals against it; an interface has no runtime carrier for a stub\n cost: number | null; // case-violation-ok-legacy-back-compat: the type is named in an exported signature, so consumers build object literals against it; an interface has no runtime carrier for a stub\n depth: number; // case-violation-ok-legacy-back-compat: the type is named in an exported signature, so consumers build object literals against it; an interface has no runtime carrier for a stub\n isCoAgentRun: boolean; // case-violation-ok-legacy-back-compat: the type is named in an exported signature, so consumers build object literals against it; an interface has no runtime carrier for a stub\n}\n\n/** Channel row decorated with its definition's transport type for display. */\nexport interface SessionChannelDisplayRow {\n row: SessionChannelRow; // case-violation-ok-legacy-back-compat: the type is named in an exported signature, so consumers build object literals against it; an interface has no runtime carrier for a stub\n transportType: string | null; // case-violation-ok-legacy-back-compat: the type is named in an exported signature, so consumers build object literals against it; an interface has no runtime carrier for a stub\n}\n\n/**\n * Custom form for 'MJ: AI Agent Sessions' — the observability surface for\n * long-lived realtime (voice) agent sessions. Mirrors the AI Agent Run form's\n * visual language: header with icon / status badge / stats, config bar, and\n * tabbed panes for the delegated run tree, channels, transcript, and details.\n */\n@RegisterClass(BaseFormComponent, 'MJ: AI Agent Sessions')\n@Component({\n standalone: false,\n selector: 'mj-ai-agent-session-form',\n templateUrl: './ai-agent-session-form.component.html',\n styleUrls: ['./ai-agent-session-form.component.css']\n})\nexport class MJAIAgentSessionFormComponentExtended extends MJAIAgentSessionFormComponent implements OnInit {\n public record!: MJAIAgentSessionEntity;\n\n /** Hide the generated-section controls — this form has a fully custom layout. */\n public readonly ToolbarConfig = CUSTOM_LAYOUT_TOOLBAR_CONFIG;\n\n /** Sessions read best full-width, like the agent-run form. */\n public override getDefaultFormWidthMode(): 'centered' | 'full-width' { return 'full-width'; }\n\n // UI state\n public ActiveTab: 'runs' | 'channels' | 'transcript' | 'details' = 'runs';\n public Loading = false;\n public LoadError: string | null = null;\n\n // Loaded data\n public RunTree: SessionRunTreeItem[] = [];\n public Channels: SessionChannelDisplayRow[] = [];\n public Transcript: TranscriptRow[] = [];\n public DelegatedRunCount = 0;\n public TargetAgentID: string | null = null;\n public TargetAgentName: string | null = null;\n public CoAgentPromptRun: CoAgentPromptRunRow | null = null;\n public SessionTokens: number | null = null;\n public SessionCost: number | null = null;\n\n private sessionConfig: SessionConfigJson = {};\n private cachedPrettyConfig: string | null = null;\n\n private navigationService = inject(NavigationService);\n private appManager = inject(ApplicationManager);\n\n override async ngOnInit(): Promise<void> {\n await super.ngOnInit();\n if (this.record?.ID) {\n this.sessionConfig = this.parseSessionConfig(this.record.Config_);\n await this.loadSessionData();\n }\n }\n\n // ────────────────────────────────────────────────────────────────────\n // Data loading\n // ────────────────────────────────────────────────────────────────────\n\n /** Parses the session's Config JSON; returns an empty config on any error. */\n private parseSessionConfig(raw: string | null): SessionConfigJson {\n if (!raw) return {};\n try {\n const parsed = JSON.parse(raw) as Partial<SessionConfigJson>;\n return {\n targetAgentID: typeof parsed.targetAgentID === 'string' ? parsed.targetAgentID : undefined,\n coAgentRunID: typeof parsed.coAgentRunID === 'string' ? parsed.coAgentRunID : undefined,\n promptRunID: typeof parsed.promptRunID === 'string' ? parsed.promptRunID : undefined\n };\n } catch {\n return {};\n }\n }\n\n /**\n * Loads everything the form shows in a single batched RunViews round trip:\n * the session's run tree, its channel instances (+ channel definitions for\n * transport), the transcript, and — when the Config carries observability\n * ids — the co-agent prompt run and target agent name.\n */\n private async loadSessionData(): Promise<void> {\n this.Loading = true;\n this.LoadError = null;\n try {\n const rv = RunView.FromMetadataProvider(this.ProviderToUse);\n const sessionId = this.record.ID;\n\n const results = await rv.RunViews([\n {\n EntityName: 'MJ: AI Agent Runs',\n Fields: ['ID', 'AgentID', 'Agent', 'ParentRunID', 'Status', 'StartedAt', 'CompletedAt',\n 'TotalTokensUsed', 'TotalCost', 'TotalTokensUsedRollup', 'TotalCostRollup'],\n ExtraFilter: `AgentSessionID='${sessionId}'`,\n OrderBy: 'StartedAt ASC',\n ResultType: 'simple'\n },\n {\n EntityName: 'MJ: AI Agent Session Channels',\n Fields: ['ID', 'ChannelID', 'Channel', 'Status', 'SocketUrl', '__mj_CreatedAt', 'LastActiveAt', 'DisconnectedAt'],\n ExtraFilter: `AgentSessionID='${sessionId}'`,\n OrderBy: '__mj_CreatedAt ASC',\n ResultType: 'simple'\n },\n {\n EntityName: 'MJ: AI Agent Channels',\n Fields: ['ID', 'Name', 'TransportType'],\n ResultType: 'simple'\n },\n {\n EntityName: 'MJ: Conversation Details',\n Fields: ['ID', 'Role', 'Message', 'Agent', 'User', '__mj_CreatedAt'],\n ExtraFilter: `AgentSessionID='${sessionId}'`,\n OrderBy: '__mj_CreatedAt ASC',\n ResultType: 'simple'\n },\n // Co-agent model leg — only meaningful when Config carries promptRunID;\n // an impossible filter keeps the batch shape stable when it doesn't.\n {\n EntityName: 'MJ: AI Prompt Runs',\n Fields: ['ID', 'Model', 'Status', 'RunAt', 'CompletedAt', 'TokensUsed', 'TokensPrompt', 'TokensCompletion', 'TotalCost'],\n ExtraFilter: this.sessionConfig.promptRunID ? `ID='${this.sessionConfig.promptRunID}'` : `1=0`,\n ResultType: 'simple'\n },\n // Target agent name resolution from Config.targetAgentID\n {\n EntityName: 'MJ: AI Agents',\n Fields: ['ID', 'Name'],\n ExtraFilter: this.sessionConfig.targetAgentID ? `ID='${this.sessionConfig.targetAgentID}'` : `1=0`,\n ResultType: 'simple'\n }\n ]);\n\n const runs = (results[0]?.Success ? results[0].Results : []) as SessionRunRow[];\n const channelRows = (results[1]?.Success ? results[1].Results : []) as SessionChannelRow[];\n const channelDefs = (results[2]?.Success ? results[2].Results : []) as ChannelDefinitionRow[];\n this.Transcript = (results[3]?.Success ? results[3].Results : []) as TranscriptRow[];\n const promptRuns = (results[4]?.Success ? results[4].Results : []) as CoAgentPromptRunRow[];\n const targetAgents = (results[5]?.Success ? results[5].Results : []) as { ID: string; Name: string }[];\n\n this.CoAgentPromptRun = promptRuns.length > 0 ? promptRuns[0] : null;\n this.TargetAgentID = this.sessionConfig.targetAgentID ?? null;\n this.TargetAgentName = targetAgents.length > 0 ? targetAgents[0].Name : null;\n\n this.Channels = channelRows.map(row => ({\n row,\n transportType: channelDefs.find(d => UUIDsEqual(d.ID, row.ChannelID))?.TransportType ?? null\n }));\n\n this.RunTree = this.buildRunTree(runs);\n this.DelegatedRunCount = runs.filter(r => r.ParentRunID != null).length;\n this.computeSessionUsage(runs);\n } catch (error) {\n console.error('Error loading agent session data:', error);\n this.LoadError = 'Failed to load session data';\n } finally {\n this.Loading = false;\n this.cdr.markForCheck();\n }\n }\n\n /**\n * Flattens the session's runs into a depth-first tree: root runs (no\n * ParentRunID, or parent outside the session) first, children nested by\n * ParentRunID. The co-agent run (Config.coAgentRunID) gets its streaming\n * prompt run inserted directly beneath it as a 'promptRun' leg.\n */\n private buildRunTree(runs: SessionRunRow[]): SessionRunTreeItem[] {\n const items: SessionRunTreeItem[] = [];\n const byParent = new Map<string, SessionRunRow[]>();\n const idSet = new Set(runs.map(r => r.ID.toUpperCase()));\n\n const roots: SessionRunRow[] = [];\n for (const run of runs) {\n if (run.ParentRunID && idSet.has(run.ParentRunID.toUpperCase())) {\n const key = run.ParentRunID.toUpperCase();\n const list = byParent.get(key) ?? [];\n list.push(run);\n byParent.set(key, list);\n } else {\n roots.push(run);\n }\n }\n\n const visit = (run: SessionRunRow, depth: number): void => {\n const isCoAgent = this.sessionConfig.coAgentRunID != null && UUIDsEqual(run.ID, this.sessionConfig.coAgentRunID);\n items.push(this.runToTreeItem(run, depth, isCoAgent));\n if (isCoAgent && this.CoAgentPromptRun) {\n items.push(this.promptRunToTreeItem(this.CoAgentPromptRun, depth + 1));\n }\n for (const child of byParent.get(run.ID.toUpperCase()) ?? []) {\n visit(child, depth + 1);\n }\n };\n for (const root of roots) {\n visit(root, 0);\n }\n return items;\n }\n\n private runToTreeItem(run: SessionRunRow, depth: number, isCoAgent: boolean): SessionRunTreeItem {\n const shortId = run.ID.substring(0, 8);\n return {\n kind: 'run',\n id: run.ID,\n entityName: 'MJ: AI Agent Runs',\n title: isCoAgent\n ? `${run.Agent ?? 'Co-Agent'} · session run`\n : `${run.Agent ?? 'Agent'} · delegated run`,\n subtitle: isCoAgent\n ? `AIAgentRun #${shortId} · one long-lived run for this session`\n : `AIAgentRun #${shortId} · ParentRunID #${run.ParentRunID?.substring(0, 8) ?? '—'} · invoked via target-agent tool`,\n status: run.Status,\n startedAt: run.StartedAt,\n completedAt: run.CompletedAt,\n tokens: run.TotalTokensUsedRollup ?? run.TotalTokensUsed,\n cost: run.TotalCostRollup ?? run.TotalCost,\n depth,\n isCoAgentRun: isCoAgent\n };\n }\n\n private promptRunToTreeItem(pr: CoAgentPromptRunRow, depth: number): SessionRunTreeItem {\n return {\n kind: 'promptRun',\n id: pr.ID,\n entityName: 'MJ: AI Prompt Runs',\n title: `Model leg · ${pr.Model}`,\n subtitle: `AIPromptRun #${pr.ID.substring(0, 8)} · ${pr.TokensPrompt ?? 0} in · ${pr.TokensCompletion ?? 0} out · usage checkpointed incrementally`,\n status: pr.Status,\n startedAt: pr.RunAt,\n completedAt: pr.CompletedAt,\n tokens: pr.TokensUsed,\n cost: pr.TotalCost,\n depth,\n isCoAgentRun: false\n };\n }\n\n /**\n * Session-level tokens/cost for the header stats: prefer the co-agent run's\n * rollups (covers delegated children), fall back to the prompt run's\n * incremental usage when the run rollups haven't been finalized yet.\n */\n private computeSessionUsage(runs: SessionRunRow[]): void {\n const coAgentRun = this.sessionConfig.coAgentRunID\n ? runs.find(r => UUIDsEqual(r.ID, this.sessionConfig.coAgentRunID)) ?? null\n : null;\n const runTokens = coAgentRun ? (coAgentRun.TotalTokensUsedRollup ?? coAgentRun.TotalTokensUsed) : null;\n const runCost = coAgentRun ? (coAgentRun.TotalCostRollup ?? coAgentRun.TotalCost) : null;\n this.SessionTokens = runTokens ?? this.CoAgentPromptRun?.TokensUsed ?? null;\n this.SessionCost = runCost ?? this.CoAgentPromptRun?.TotalCost ?? null;\n }\n\n // ────────────────────────────────────────────────────────────────────\n // Display helpers\n // ────────────────────────────────────────────────────────────────────\n\n public ChangeTab(tab: 'runs' | 'channels' | 'transcript' | 'details'): void {\n this.ActiveTab = tab;\n }\n\n public GetStatusIcon(status: string | null): string {\n switch (status) {\n case 'Active': return 'fa-tower-broadcast';\n case 'Idle': return 'fa-moon';\n case 'Closed': return 'fa-circle-stop';\n default: return 'fa-question-circle';\n }\n }\n\n public GetRunStatusIcon(status: string): string {\n switch (status) {\n case 'Running': return 'fa-circle-notch fa-spin';\n case 'Completed': return 'fa-check-circle';\n case 'Failed': return 'fa-times-circle';\n case 'Cancelled': return 'fa-ban';\n case 'Paused': return 'fa-pause-circle';\n case 'AwaitingFeedback': return 'fa-hourglass-half';\n case 'Pending': return 'fa-clock';\n default: return 'fa-question-circle';\n }\n }\n\n public GetChannelIcon(channelName: string | null): string {\n switch (channelName) {\n case 'VoiceAudio': return 'fa-microphone-lines';\n case 'TextChat': return 'fa-comment';\n case 'ClientControl': return 'fa-sliders';\n case 'Whiteboard': return 'fa-chalkboard';\n case 'Video': return 'fa-video';\n default: return 'fa-plug';\n }\n }\n\n /** Short, readable session id (first segment of the UUID). */\n public get ShortSessionId(): string {\n return this.record?.ID ? `sess_${this.record.ID.substring(0, 8).toLowerCase()}` : '';\n }\n\n /** Created → ClosedAt (terminal) or LastActiveAt (still open) duration. */\n public get SessionDuration(): string {\n if (!this.record) return '';\n const start = this.toDate(this.record.__mj_CreatedAt);\n const end = this.toDate(this.record.ClosedAt) ?? this.toDate(this.record.LastActiveAt);\n if (!start || !end) return '—';\n return this.FormatDuration(start, end);\n }\n\n public FormatDuration(start: DateLike | null, end: DateLike | null): string {\n const s = this.toDate(start);\n const e = this.toDate(end);\n if (!s) return '—';\n if (!e) return 'Running...';\n const ms = e.getTime() - s.getTime();\n if (ms < 0) return '—';\n if (ms < 1000) return `${ms}ms`;\n if (ms < 60000) return `${(ms / 1000).toFixed(1)}s`;\n if (ms < 3600000) return `${Math.floor(ms / 60000)}m ${Math.floor((ms % 60000) / 1000)}s`;\n return `${Math.floor(ms / 3600000)}h ${Math.floor((ms % 3600000) / 60000)}m`;\n }\n\n private toDate(value: DateLike | null | undefined): Date | null {\n if (value == null) return null;\n const d = value instanceof Date ? value : new Date(value);\n return isNaN(d.getTime()) ? null : d;\n }\n\n /** Pretty-printed session Config JSON for the Details tab (cached). */\n public get PrettyConfig(): string {\n if (!this.record?.Config_) return '';\n if (this.cachedPrettyConfig !== null) return this.cachedPrettyConfig;\n try {\n this.cachedPrettyConfig = JSON.stringify(JSON.parse(this.record.Config_), null, 2);\n } catch {\n this.cachedPrettyConfig = this.record.Config_;\n }\n return this.cachedPrettyConfig;\n }\n\n // ────────────────────────────────────────────────────────────────────\n // Navigation\n // ────────────────────────────────────────────────────────────────────\n\n public OpenEntityRecord(entityName: string, recordId: string | null): void {\n if (recordId) {\n SharedService.Instance.OpenEntityRecord(entityName, CompositeKey.FromURLSegment(this.ProviderToUse.EntityByName(entityName), recordId));\n }\n }\n\n /** Opens the linked conversation in the Chat app (same pattern as the agent-run form). */\n public NavigateToConversation(): void {\n if (!this.record?.ConversationID) return;\n const chatApp = this.appManager.GetAllApps().find(app => app.Name === 'Chat');\n if (!chatApp) {\n // Fall back to the raw conversation record when the Chat app isn't installed\n this.OpenEntityRecord('MJ: Conversations', this.record.ConversationID);\n return;\n }\n this.navigationService.OpenNavItemByName(\n 'Conversations',\n // realtimeSessionId opens the SESSION REVIEW overlay directly on arrival\n // (the chat wrapper consumes it once) — not just the containing chat.\n { conversationId: this.record.ConversationID, realtimeSessionId: this.record.ID },\n chatApp.ID\n );\n }\n\n public RefreshData(): void {\n if (!this.record?.ID) return;\n this.cachedPrettyConfig = null;\n this.record.Load(this.record.ID).then(() => {\n this.sessionConfig = this.parseSessionConfig(this.record.Config_);\n void this.loadSessionData();\n });\n }\n}\n","@if (record) {\n<mj-record-form-container [Record]=\"record\" [FormComponent]=\"this\"\n [ToolbarConfig]=\"ToolbarConfig\"\n [WidthMode]=\"'full-width'\"\n (Navigate)=\"OnFormNavigate($event)\"\n (DeleteRequested)=\"OnDeleteRequested()\"\n (FavoriteToggled)=\"OnFavoriteToggled()\"\n (HistoryRequested)=\"OnHistoryRequested()\"\n (ListManagementRequested)=\"OnListManagementRequested()\">\n\n <div class=\"record-form ai-agent-session-form\">\n <!-- Header (mirrors the AI Agent Run form header) -->\n <div class=\"header\">\n <div class=\"header-content\">\n <div class=\"header-left\">\n <div class=\"icon-wrapper\">\n <i class=\"fas fa-tower-broadcast\"></i>\n </div>\n <div class=\"header-info\">\n <h2>AI Agent Session</h2>\n <div class=\"meta-info\">\n @if (record.AgentID) {\n <span class=\"agent-name\">\n <a href=\"javascript:void(0)\" class=\"entity-link\" (click)=\"OpenEntityRecord('AI Agents', record.AgentID)\">\n {{ record.Agent || 'Agent' }}\n </a>\n </span>\n }\n @if (TargetAgentID) {\n <i class=\"fas fa-arrow-right-long target-arrow\"></i>\n <span class=\"agent-name\">\n <a href=\"javascript:void(0)\" class=\"entity-link\" (click)=\"OpenEntityRecord('AI Agents', TargetAgentID)\">\n {{ TargetAgentName || 'Target agent' }}\n </a>\n </span>\n }\n <span class=\"run-id\">{{ ShortSessionId }}</span>\n @if (record.ConversationID) {\n <span class=\"conversation-pill\" (click)=\"NavigateToConversation()\" title=\"Open conversation in Chat app\">\n <i class=\"fas fa-comments\"></i>\n <span>{{ record.Conversation || 'Conversation' }}</span>\n <i class=\"fas fa-external-link-alt pill-action\"></i>\n </span>\n }\n </div>\n </div>\n </div>\n <div class=\"header-right\">\n <div class=\"status-badge\" [attr.data-status]=\"record.Status\">\n <i class=\"fas\" [ngClass]=\"GetStatusIcon(record.Status)\"></i>\n {{ record.Status }}\n </div>\n <div class=\"header-actions\">\n <button class=\"btn-icon\" (click)=\"RefreshData()\" title=\"Refresh\">\n <i class=\"fas fa-sync-alt\"></i>\n </button>\n </div>\n </div>\n </div>\n\n <div class=\"header-stats\">\n <div class=\"stat\">\n <span class=\"label\">User</span>\n <span class=\"value\">\n <a href=\"javascript:void(0)\" class=\"entity-link\" (click)=\"OpenEntityRecord('Users', record.UserID)\">{{ record.User }}</a>\n </span>\n </div>\n <div class=\"stat\">\n <span class=\"label\">Started</span>\n <span class=\"value\">{{ record.__mj_CreatedAt | date:'medium' }}</span>\n </div>\n @if (record.ClosedAt) {\n <div class=\"stat\">\n <span class=\"label\">Closed</span>\n <span class=\"value\">{{ record.ClosedAt | date:'medium' }}</span>\n </div>\n } @else {\n <div class=\"stat\">\n <span class=\"label\">Last Active</span>\n <span class=\"value\">{{ record.LastActiveAt | date:'medium' }}</span>\n </div>\n }\n <div class=\"stat\">\n <span class=\"label\">Duration</span>\n <span class=\"value\">{{ SessionDuration }}</span>\n </div>\n <div class=\"stat\">\n <span class=\"label\">Channels</span>\n <span class=\"value\">{{ Channels.length }}</span>\n </div>\n <div class=\"stat\">\n <span class=\"label\">Delegated Runs</span>\n <span class=\"value\">{{ DelegatedRunCount }}</span>\n </div>\n @if (SessionTokens != null && SessionTokens > 0) {\n <div class=\"stat\">\n <span class=\"label\">Tokens</span>\n <span class=\"value\">{{ SessionTokens | number:'1.0-0' }}</span>\n </div>\n }\n @if (SessionCost != null && SessionCost > 0) {\n <div class=\"stat\">\n <span class=\"label\">Cost</span>\n <span class=\"value success\">${{ SessionCost | number:'1.2-4' }}</span>\n </div>\n }\n </div>\n\n <!-- Config bar: target agent / host instance / continuation -->\n <div class=\"configuration-bar\">\n <div class=\"config-item\">\n <i class=\"fas fa-bullseye\"></i>\n <div class=\"config-content\">\n <div class=\"config-label\">Target Agent</div>\n <div class=\"config-value\">\n @if (TargetAgentID) {\n <a href=\"javascript:void(0)\" class=\"entity-link\" (click)=\"OpenEntityRecord('AI Agents', TargetAgentID)\">\n {{ TargetAgentName || 'Unknown' }}\n </a>\n } @else {\n <span class=\"muted\">None</span>\n }\n </div>\n </div>\n </div>\n <div class=\"config-item\">\n <i class=\"fas fa-server\"></i>\n <div class=\"config-content\">\n <div class=\"config-label\">Host Instance</div>\n <div class=\"config-value mono\">{{ record.HostInstanceID || '—' }}</div>\n </div>\n </div>\n <div class=\"config-item\">\n <i class=\"fas fa-link\"></i>\n <div class=\"config-content\">\n <div class=\"config-label\">Continuation</div>\n <div class=\"config-value\">\n @if (record.LastSessionID) {\n <a href=\"javascript:void(0)\" class=\"entity-link\" (click)=\"OpenEntityRecord('MJ: AI Agent Sessions', record.LastSessionID)\">\n Resumed from prior session\n </a>\n } @else {\n <span class=\"muted\">None (new session)</span>\n }\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Tabs -->\n <div class=\"tabs\">\n <button class=\"tab\" [class.active]=\"ActiveTab === 'runs'\" (click)=\"ChangeTab('runs')\">\n <i class=\"fas fa-diagram-project\"></i> Runs\n @if (RunTree.length > 0) { <span class=\"tab-count\">{{ RunTree.length }}</span> }\n </button>\n <button class=\"tab\" [class.active]=\"ActiveTab === 'channels'\" (click)=\"ChangeTab('channels')\">\n <i class=\"fas fa-plug\"></i> Channels\n @if (Channels.length > 0) { <span class=\"tab-count\">{{ Channels.length }}</span> }\n </button>\n <button class=\"tab\" [class.active]=\"ActiveTab === 'transcript'\" (click)=\"ChangeTab('transcript')\">\n <i class=\"fas fa-comments\"></i> Transcript\n @if (Transcript.length > 0) { <span class=\"tab-count\">{{ Transcript.length }}</span> }\n </button>\n <button class=\"tab\" [class.active]=\"ActiveTab === 'details'\" (click)=\"ChangeTab('details')\">\n <i class=\"fas fa-info-circle\"></i> Details\n </button>\n </div>\n\n <!-- Content -->\n <div class=\"content-area\">\n @if (Loading) {\n <mj-loading text=\"Loading session data...\" size=\"medium\"></mj-loading>\n } @else if (LoadError) {\n <mj-empty-state\n Variant=\"error\"\n [Message]=\"LoadError\" />\n } @else {\n\n <!-- Runs tab: the session's delegated run tree -->\n @if (ActiveTab === 'runs') {\n <div class=\"tab-content\">\n @if (RunTree.length === 0) {\n <mj-empty-state\n Icon=\"fa-solid fa-diagram-project\"\n Title=\"No Runs\"\n Message=\"No agent runs have been recorded for this session yet.\" />\n } @else {\n <div class=\"run-tree\">\n @for (node of RunTree; track node.id) {\n <div class=\"run-node\"\n [class.run-node--child]=\"node.depth > 0\"\n [style.margin-left.px]=\"node.depth * 36\"\n (click)=\"OpenEntityRecord(node.entityName, node.id)\"\n title=\"Open record\">\n <div class=\"run-marker\"\n [class.run-marker--coagent]=\"node.isCoAgentRun\"\n [class.run-marker--prompt]=\"node.kind === 'promptRun'\">\n @if (node.kind === 'promptRun') {\n <i class=\"fas fa-microchip\"></i>\n } @else if (node.isCoAgentRun) {\n <i class=\"fas fa-tower-broadcast\"></i>\n } @else {\n <i class=\"fas fa-robot\"></i>\n }\n </div>\n <div class=\"run-body\">\n <div class=\"run-headrow\">\n <h4 class=\"run-title\">{{ node.title }}</h4>\n <span class=\"run-time\">{{ node.startedAt | date:'h:mm:ss a' }}</span>\n </div>\n <div class=\"run-sub\">{{ node.subtitle }}</div>\n <div class=\"run-foot\">\n <span class=\"run-status\" [attr.data-status]=\"node.status\">\n <i class=\"fas\" [ngClass]=\"GetRunStatusIcon(node.status)\"></i> {{ node.status }}\n </span>\n <span class=\"run-chip\">\n <i class=\"fas fa-clock\"></i> {{ FormatDuration(node.startedAt, node.completedAt) }}\n </span>\n @if (node.tokens != null && node.tokens > 0) {\n <span class=\"run-chip\"><i class=\"fas fa-coins\"></i> {{ node.tokens | number:'1.0-0' }} tok</span>\n }\n @if (node.cost != null && node.cost > 0) {\n <span class=\"run-chip\"><i class=\"fas fa-dollar-sign\"></i> {{ node.cost | number:'1.2-4' }}</span>\n }\n </div>\n </div>\n </div>\n }\n </div>\n }\n </div>\n }\n\n <!-- Channels tab -->\n @if (ActiveTab === 'channels') {\n <div class=\"tab-content\">\n @if (Channels.length === 0) {\n <mj-empty-state\n Icon=\"fa-solid fa-plug\"\n Title=\"No Channels\"\n Message=\"No channel instances were attached to this session.\" />\n } @else {\n <div class=\"channels-grid-wrap\">\n <table class=\"channels-grid\">\n <thead>\n <tr>\n <th>Channel</th>\n <th>Transport</th>\n <th>Status</th>\n <th>Connected</th>\n <th>Last Active</th>\n <th>Disconnected</th>\n <th>Socket</th>\n </tr>\n </thead>\n <tbody>\n @for (channel of Channels; track channel.row.ID) {\n <tr (click)=\"OpenEntityRecord('MJ: AI Agent Session Channels', channel.row.ID)\" title=\"Open record\">\n <td>\n <span class=\"cell-strong\">\n <i class=\"fas\" [ngClass]=\"GetChannelIcon(channel.row.Channel)\"></i>\n {{ channel.row.Channel }}\n </span>\n </td>\n <td>\n @if (channel.transportType) {\n <span class=\"transport-pill\" [attr.data-transport]=\"channel.transportType\">{{ channel.transportType }}</span>\n } @else {\n <span class=\"muted\">—</span>\n }\n </td>\n <td>\n <span class=\"channel-status-pill\" [attr.data-status]=\"channel.row.Status\">{{ channel.row.Status }}</span>\n </td>\n <td class=\"mono\">{{ channel.row.__mj_CreatedAt | date:'h:mm:ss a' }}</td>\n <td class=\"mono\">{{ channel.row.LastActiveAt | date:'h:mm:ss a' }}</td>\n <td class=\"mono\">\n @if (channel.row.DisconnectedAt) {\n {{ channel.row.DisconnectedAt | date:'h:mm:ss a' }}\n } @else {\n <span class=\"muted\">—</span>\n }\n </td>\n <td class=\"mono socket-cell\" [title]=\"channel.row.SocketUrl || ''\">\n {{ channel.row.SocketUrl || '—' }}\n </td>\n </tr>\n }\n </tbody>\n </table>\n </div>\n }\n </div>\n }\n\n <!-- Transcript tab -->\n @if (ActiveTab === 'transcript') {\n <div class=\"tab-content\">\n @if (Transcript.length === 0) {\n <mj-empty-state\n Icon=\"fa-solid fa-comments\"\n Title=\"No Transcript\"\n Message=\"No conversation messages were stamped with this session.\" />\n } @else {\n <div class=\"transcript-thread\">\n @for (turn of Transcript; track turn.ID) {\n <div class=\"turn\" [class.turn--user]=\"turn.Role === 'User'\" [class.turn--error]=\"turn.Role === 'Error'\">\n <div class=\"turn-avatar\">\n @if (turn.Role === 'User') {\n <i class=\"fas fa-user\"></i>\n } @else if (turn.Role === 'Error') {\n <i class=\"fas fa-triangle-exclamation\"></i>\n } @else {\n <i class=\"fas fa-robot\"></i>\n }\n </div>\n <div class=\"turn-main\">\n <div class=\"turn-meta\">\n @if (turn.Role === 'User') {\n {{ turn.User || 'User' }}\n } @else {\n {{ turn.Agent || 'Agent' }}\n }\n <span class=\"turn-time\">{{ turn.__mj_CreatedAt | date:'h:mm:ss a' }}</span>\n </div>\n <div class=\"turn-bubble\">{{ turn.Message }}</div>\n </div>\n </div>\n }\n </div>\n }\n </div>\n }\n\n <!-- Details tab -->\n @if (ActiveTab === 'details') {\n <div class=\"tab-content\">\n <mj-accordion-panel [Expanded]=\"true\">\n <ng-template mjAccordionTitle>\n <i class=\"fas fa-info-circle\"></i> Session Record\n </ng-template>\n <div class=\"details-grid\">\n <div class=\"detail-item\">\n <label>ID</label>\n <span class=\"mono\">{{ record.ID }}</span>\n </div>\n <div class=\"detail-item\">\n <label>Agent (Co-Agent)</label>\n <span>\n <a href=\"javascript:void(0)\" class=\"entity-link\" (click)=\"OpenEntityRecord('AI Agents', record.AgentID)\">\n {{ record.Agent || 'N/A' }}\n </a>\n </span>\n </div>\n <div class=\"detail-item\">\n <label>User</label>\n <span>\n <a href=\"javascript:void(0)\" class=\"entity-link\" (click)=\"OpenEntityRecord('Users', record.UserID)\">\n {{ record.User }}\n </a>\n </span>\n </div>\n <div class=\"detail-item\">\n <label>Conversation</label>\n <span>\n @if (record.ConversationID) {\n <a href=\"javascript:void(0)\" class=\"entity-link\" (click)=\"OpenEntityRecord('MJ: Conversations', record.ConversationID)\">\n {{ record.Conversation || record.ConversationID }}\n </a>\n } @else {\n <span>N/A</span>\n }\n </span>\n </div>\n <div class=\"detail-item\">\n <label>Status</label>\n <span class=\"status-badge small\" [attr.data-status]=\"record.Status\">{{ record.Status }}</span>\n </div>\n <div class=\"detail-item\">\n <label>Prior Session</label>\n <span>\n @if (record.LastSessionID) {\n <a href=\"javascript:void(0)\" class=\"entity-link\" (click)=\"OpenEntityRecord('MJ: AI Agent Sessions', record.LastSessionID)\">\n {{ record.LastSessionID }}\n </a>\n } @else {\n <span>None (root)</span>\n }\n </span>\n </div>\n <div class=\"detail-item\">\n <label>Host Instance</label>\n <span class=\"mono\">{{ record.HostInstanceID || 'N/A' }}</span>\n </div>\n <div class=\"detail-item\">\n <label>Last Active At</label>\n <span>{{ record.LastActiveAt | date:'medium' }}</span>\n </div>\n <div class=\"detail-item\">\n <label>Closed At</label>\n <span>{{ record.ClosedAt ? (record.ClosedAt | date:'medium') : 'Still open' }}</span>\n </div>\n </div>\n </mj-accordion-panel>\n\n @if (record.Config_) {\n <mj-accordion-panel [Expanded]=\"false\">\n <ng-template mjAccordionTitle>\n <i class=\"fas fa-code\"></i> Config (Session State JSON)\n </ng-template>\n <div class=\"config-viewer\">\n <mj-code-editor\n [ngModel]=\"PrettyConfig\"\n [language]=\"'json'\"\n [readonly]=\"true\"\n style=\"height: 300px; width: 100%;\">\n </mj-code-editor>\n </div>\n </mj-accordion-panel>\n }\n </div>\n }\n }\n </div>\n </div>\n</mj-record-form-container>\n}\n"]}
|
|
@@ -13,8 +13,8 @@ export interface CategoryTreeNode {
|
|
|
13
13
|
expanded?: boolean;
|
|
14
14
|
}
|
|
15
15
|
export interface ActionDisplayItem extends MJActionEntity {
|
|
16
|
-
|
|
17
|
-
|
|
16
|
+
Selected: boolean;
|
|
17
|
+
CategoryName?: string;
|
|
18
18
|
}
|
|
19
19
|
/**
|
|
20
20
|
* Modern, clean dialog for selecting actions to add to an AI Agent.
|
|
@@ -22,23 +22,85 @@ export interface ActionDisplayItem extends MJActionEntity {
|
|
|
22
22
|
*/
|
|
23
23
|
export declare class AddActionDialogComponent extends BaseAngularComponent implements OnInit, OnDestroy {
|
|
24
24
|
private cdr;
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
25
|
+
AgentId: string;
|
|
26
|
+
/** @deprecated Use {@link AgentId}. */
|
|
27
|
+
get agentId(): string;
|
|
28
|
+
/** @deprecated Use {@link AgentId}. */
|
|
29
|
+
set agentId(value: string);
|
|
30
|
+
AgentName: string;
|
|
31
|
+
/** @deprecated Use {@link AgentName}. */
|
|
32
|
+
get agentName(): string;
|
|
33
|
+
/** @deprecated Use {@link AgentName}. */
|
|
34
|
+
set agentName(value: string);
|
|
35
|
+
ExistingActionIds: string[];
|
|
36
|
+
/** @deprecated Use {@link ExistingActionIds}. */
|
|
37
|
+
get existingActionIds(): string[];
|
|
38
|
+
/** @deprecated Use {@link ExistingActionIds}. */
|
|
39
|
+
set existingActionIds(value: string[]);
|
|
28
40
|
private destroy$;
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
41
|
+
Result: Subject<MJActionEntity[]>;
|
|
42
|
+
/** @deprecated Use {@link Result}. */
|
|
43
|
+
get result(): Subject<MJActionEntity[]>;
|
|
44
|
+
/** @deprecated Use {@link Result}. */
|
|
45
|
+
set result(value: Subject<MJActionEntity[]>);
|
|
46
|
+
AllActions$: BehaviorSubject<ActionDisplayItem[]>;
|
|
47
|
+
/** @deprecated Use {@link AllActions$}. */
|
|
48
|
+
get allActions$(): BehaviorSubject<ActionDisplayItem[]>;
|
|
49
|
+
/** @deprecated Use {@link AllActions$}. */
|
|
50
|
+
set allActions$(value: BehaviorSubject<ActionDisplayItem[]>);
|
|
51
|
+
Categories$: BehaviorSubject<MJActionCategoryEntity[]>;
|
|
52
|
+
/** @deprecated Use {@link Categories$}. */
|
|
53
|
+
get categories$(): BehaviorSubject<MJActionCategoryEntity[]>;
|
|
54
|
+
/** @deprecated Use {@link Categories$}. */
|
|
55
|
+
set categories$(value: BehaviorSubject<MJActionCategoryEntity[]>);
|
|
56
|
+
FilteredActions$: BehaviorSubject<ActionDisplayItem[]>;
|
|
57
|
+
/** @deprecated Use {@link FilteredActions$}. */
|
|
58
|
+
get filteredActions$(): BehaviorSubject<ActionDisplayItem[]>;
|
|
59
|
+
/** @deprecated Use {@link FilteredActions$}. */
|
|
60
|
+
set filteredActions$(value: BehaviorSubject<ActionDisplayItem[]>);
|
|
61
|
+
CategoryTree$: BehaviorSubject<CategoryTreeNode[]>;
|
|
62
|
+
/** @deprecated Use {@link CategoryTree$}. */
|
|
63
|
+
get categoryTree$(): BehaviorSubject<CategoryTreeNode[]>;
|
|
64
|
+
/** @deprecated Use {@link CategoryTree$}. */
|
|
65
|
+
set categoryTree$(value: BehaviorSubject<CategoryTreeNode[]>);
|
|
66
|
+
SelectedActions$: BehaviorSubject<Set<string>>;
|
|
67
|
+
/** @deprecated Use {@link SelectedActions$}. */
|
|
68
|
+
get selectedActions$(): BehaviorSubject<Set<string>>;
|
|
69
|
+
/** @deprecated Use {@link SelectedActions$}. */
|
|
70
|
+
set selectedActions$(value: BehaviorSubject<Set<string>>);
|
|
71
|
+
IsLoading$: BehaviorSubject<boolean>;
|
|
72
|
+
/** @deprecated Use {@link IsLoading$}. */
|
|
73
|
+
get isLoading$(): BehaviorSubject<boolean>;
|
|
74
|
+
/** @deprecated Use {@link IsLoading$}. */
|
|
75
|
+
set isLoading$(value: BehaviorSubject<boolean>);
|
|
76
|
+
SearchControl: FormControl<string | null>;
|
|
77
|
+
/** @deprecated Use {@link SearchControl}. */
|
|
78
|
+
get searchControl(): FormControl<string | null>;
|
|
79
|
+
/** @deprecated Use {@link SearchControl}. */
|
|
80
|
+
set searchControl(value: FormControl<string | null>);
|
|
81
|
+
SelectedCategoryId$: BehaviorSubject<string>;
|
|
82
|
+
/** @deprecated Use {@link SelectedCategoryId$}. */
|
|
83
|
+
get selectedCategoryId$(): BehaviorSubject<string>;
|
|
84
|
+
/** @deprecated Use {@link SelectedCategoryId$}. */
|
|
85
|
+
set selectedCategoryId$(value: BehaviorSubject<string>);
|
|
86
|
+
ViewMode$: BehaviorSubject<"list" | "grid">;
|
|
87
|
+
/** @deprecated Use {@link ViewMode$}. */
|
|
88
|
+
get viewMode$(): BehaviorSubject<"list" | "grid">;
|
|
89
|
+
/** @deprecated Use {@link ViewMode$}. */
|
|
90
|
+
set viewMode$(value: BehaviorSubject<"list" | "grid">);
|
|
91
|
+
ExpandedCategories: Set<string>;
|
|
92
|
+
/** @deprecated Use {@link ExpandedCategories}. */
|
|
93
|
+
get expandedCategories(): Set<string>;
|
|
94
|
+
/** @deprecated Use {@link ExpandedCategories}. */
|
|
95
|
+
set expandedCategories(value: Set<string>);
|
|
96
|
+
get SelectedCount(): number;
|
|
97
|
+
/** @deprecated Use {@link SelectedCount}. */
|
|
40
98
|
get selectedCount(): number;
|
|
99
|
+
get TotalActionCount(): number;
|
|
100
|
+
/** @deprecated Use {@link TotalActionCount}. */
|
|
41
101
|
get totalActionCount(): number;
|
|
102
|
+
get FilteredCount(): number;
|
|
103
|
+
/** @deprecated Use {@link FilteredCount}. */
|
|
42
104
|
get filteredCount(): number;
|
|
43
105
|
DialogClose: EventEmitter<void>;
|
|
44
106
|
constructor(cdr: ChangeDetectorRef);
|
|
@@ -52,12 +114,24 @@ export declare class AddActionDialogComponent extends BaseAngularComponent imple
|
|
|
52
114
|
private filterActions;
|
|
53
115
|
private getCategoryNameById;
|
|
54
116
|
private preselectExistingActions;
|
|
117
|
+
SelectCategory(categoryId: string): void;
|
|
118
|
+
/** @deprecated Use {@link SelectCategory}. */
|
|
55
119
|
selectCategory(categoryId: string): void;
|
|
120
|
+
ToggleViewMode(): void;
|
|
121
|
+
/** @deprecated Use {@link ToggleViewMode}. */
|
|
56
122
|
toggleViewMode(): void;
|
|
123
|
+
ToggleActionSelection(action: ActionDisplayItem): void;
|
|
124
|
+
/** @deprecated Use {@link ToggleActionSelection}. */
|
|
57
125
|
toggleActionSelection(action: ActionDisplayItem): void;
|
|
126
|
+
ClearSearch(): void;
|
|
127
|
+
/** @deprecated Use {@link ClearSearch}. */
|
|
58
128
|
clearSearch(): void;
|
|
129
|
+
GetActionIcon(action: ActionDisplayItem): string;
|
|
130
|
+
/** @deprecated Use {@link GetActionIcon}. */
|
|
59
131
|
getActionIcon(action: ActionDisplayItem): string;
|
|
60
132
|
cancel(): void;
|
|
133
|
+
AddSelectedActions(): void;
|
|
134
|
+
/** @deprecated Use {@link AddSelectedActions}. */
|
|
61
135
|
addSelectedActions(): void;
|
|
62
136
|
static ɵfac: i0.ɵɵFactoryDeclaration<AddActionDialogComponent, never>;
|
|
63
137
|
static ɵcmp: i0.ɵɵComponentDeclaration<AddActionDialogComponent, "mj-add-action-dialog", never, {}, { "DialogClose": "DialogClose"; }, never, never, false, never>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"add-action-dialog.component.d.ts","sourceRoot":"","sources":["../../../../src/lib/custom/AIAgents/add-action-dialog.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,MAAM,EAAE,SAAS,EAAE,iBAAiB,EAAU,YAAY,EAAE,MAAM,eAAe,CAAC;AACtG,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,OAAO,EAAE,eAAe,EAA2E,MAAM,MAAM,CAAC;AAEzH,OAAO,EAAE,cAAc,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AAGvF,OAAO,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;;AACrE,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,gBAAgB,EAAE,CAAC;IAC9B,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,iBAAkB,SAAQ,cAAc;IACvD,QAAQ,EAAE,OAAO,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;;GAGG;AACH,qBAMa,wBAAyB,SAAQ,oBAAqB,YAAW,MAAM,EAAE,SAAS;
|
|
1
|
+
{"version":3,"file":"add-action-dialog.component.d.ts","sourceRoot":"","sources":["../../../../src/lib/custom/AIAgents/add-action-dialog.component.ts"],"names":[],"mappings":"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"}
|