@acorex/modules 21.0.0-next.37 → 21.0.0-next.39

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.
Files changed (256) hide show
  1. package/fesm2022/{acorex-modules-ai-management-acorex-modules-ai-management-WuqoH4OL.mjs → acorex-modules-ai-management-acorex-modules-ai-management-CU2FvMTx.mjs} +260 -80
  2. package/fesm2022/acorex-modules-ai-management-acorex-modules-ai-management-CU2FvMTx.mjs.map +1 -0
  3. package/fesm2022/{acorex-modules-ai-management-agent.entity-DK9GNMdR.mjs → acorex-modules-ai-management-agent.entity-CUO9Jczk.mjs} +14 -19
  4. package/fesm2022/acorex-modules-ai-management-agent.entity-CUO9Jczk.mjs.map +1 -0
  5. package/fesm2022/{acorex-modules-ai-management-ai-delegated-agent-transcript-popup.component-CWXEW9yL.mjs → acorex-modules-ai-management-ai-delegated-agent-transcript-popup.component-daTGJ1Rd.mjs} +52 -8
  6. package/fesm2022/acorex-modules-ai-management-ai-delegated-agent-transcript-popup.component-daTGJ1Rd.mjs.map +1 -0
  7. package/fesm2022/{acorex-modules-ai-management-assist-delegated-agent-configurator-widget-edit.component-CNKwIqUE.mjs → acorex-modules-ai-management-assist-delegated-agent-configurator-widget-edit.component-Cmprtps-.mjs} +49 -7
  8. package/fesm2022/acorex-modules-ai-management-assist-delegated-agent-configurator-widget-edit.component-Cmprtps-.mjs.map +1 -0
  9. package/fesm2022/{acorex-modules-ai-management-assist.entity-DX2U9sd5.mjs → acorex-modules-ai-management-assist.entity-C1nM_x4Z.mjs} +2 -2
  10. package/fesm2022/{acorex-modules-ai-management-assist.entity-DX2U9sd5.mjs.map → acorex-modules-ai-management-assist.entity-C1nM_x4Z.mjs.map} +1 -1
  11. package/fesm2022/{acorex-modules-ai-management-index-KX3TVRXr.mjs → acorex-modules-ai-management-index-CjTjfydP.mjs} +2 -2
  12. package/fesm2022/{acorex-modules-ai-management-index-KX3TVRXr.mjs.map → acorex-modules-ai-management-index-CjTjfydP.mjs.map} +1 -1
  13. package/fesm2022/{acorex-modules-ai-management-model.entity-BeuDUahR.mjs → acorex-modules-ai-management-model.entity-CPHxj8h7.mjs} +2 -2
  14. package/fesm2022/{acorex-modules-ai-management-model.entity-BeuDUahR.mjs.map → acorex-modules-ai-management-model.entity-CPHxj8h7.mjs.map} +1 -1
  15. package/fesm2022/{acorex-modules-ai-management-open-ai-endpoint.entity-D-9unl6i.mjs → acorex-modules-ai-management-open-ai-endpoint.entity-a6MjMiXF.mjs} +2 -2
  16. package/fesm2022/{acorex-modules-ai-management-open-ai-endpoint.entity-D-9unl6i.mjs.map → acorex-modules-ai-management-open-ai-endpoint.entity-a6MjMiXF.mjs.map} +1 -1
  17. package/fesm2022/acorex-modules-ai-management.mjs +1 -1
  18. package/fesm2022/{acorex-modules-assessment-management-acorex-modules-assessment-management-BNK6C-Ng.mjs → acorex-modules-assessment-management-acorex-modules-assessment-management-DniyhnPK.mjs} +509 -436
  19. package/fesm2022/acorex-modules-assessment-management-acorex-modules-assessment-management-DniyhnPK.mjs.map +1 -0
  20. package/fesm2022/{acorex-modules-assessment-management-assessment-case.entity-Ds8pRzvE.mjs → acorex-modules-assessment-management-assessment-case.entity-BggEmLhz.mjs} +2 -2
  21. package/fesm2022/{acorex-modules-assessment-management-assessment-case.entity-Ds8pRzvE.mjs.map → acorex-modules-assessment-management-assessment-case.entity-BggEmLhz.mjs.map} +1 -1
  22. package/fesm2022/{acorex-modules-assessment-management-assessment-session.entity-tq1Q4wkS.mjs → acorex-modules-assessment-management-assessment-session.entity-CWR1QZv1.mjs} +2 -2
  23. package/fesm2022/{acorex-modules-assessment-management-assessment-session.entity-tq1Q4wkS.mjs.map → acorex-modules-assessment-management-assessment-session.entity-CWR1QZv1.mjs.map} +1 -1
  24. package/fesm2022/{acorex-modules-assessment-management-fill-assessment-session.command-yf0PnWC0.mjs → acorex-modules-assessment-management-fill-assessment-session.command-qajn_XDh.mjs} +2 -2
  25. package/fesm2022/{acorex-modules-assessment-management-fill-assessment-session.command-yf0PnWC0.mjs.map → acorex-modules-assessment-management-fill-assessment-session.command-qajn_XDh.mjs.map} +1 -1
  26. package/fesm2022/{acorex-modules-assessment-management-index-B2SncZAW.mjs → acorex-modules-assessment-management-index-B2l5Se1l.mjs} +25 -26
  27. package/fesm2022/acorex-modules-assessment-management-index-B2l5Se1l.mjs.map +1 -0
  28. package/fesm2022/{acorex-modules-assessment-management-preview-question.command-DPzL8C44.mjs → acorex-modules-assessment-management-preview-question.command-BCS477_k.mjs} +10 -11
  29. package/fesm2022/acorex-modules-assessment-management-preview-question.command-BCS477_k.mjs.map +1 -0
  30. package/fesm2022/{acorex-modules-assessment-management-preview-questionnaire.command-BrI5gFtx.mjs → acorex-modules-assessment-management-preview-questionnaire.command-C8lyuqE-.mjs} +2 -2
  31. package/fesm2022/{acorex-modules-assessment-management-preview-questionnaire.command-BrI5gFtx.mjs.map → acorex-modules-assessment-management-preview-questionnaire.command-C8lyuqE-.mjs.map} +1 -1
  32. package/fesm2022/{acorex-modules-assessment-management-question-bank-interface-editor-widget-edit.component-XD5IJpvW.mjs → acorex-modules-assessment-management-question-bank-interface-editor-widget-edit.component-DtowOBLy.mjs} +2 -2
  33. package/fesm2022/{acorex-modules-assessment-management-question-bank-interface-editor-widget-edit.component-XD5IJpvW.mjs.map → acorex-modules-assessment-management-question-bank-interface-editor-widget-edit.component-DtowOBLy.mjs.map} +1 -1
  34. package/fesm2022/{acorex-modules-assessment-management-question-bank-item.entity-CZ32sQ9M.mjs → acorex-modules-assessment-management-question-bank-item.entity-Br7XcU_u.mjs} +2 -2
  35. package/fesm2022/{acorex-modules-assessment-management-question-bank-item.entity-CZ32sQ9M.mjs.map → acorex-modules-assessment-management-question-bank-item.entity-Br7XcU_u.mjs.map} +1 -1
  36. package/fesm2022/{acorex-modules-assessment-management-questionnaire-calculation.entity-C7gf4s1y.mjs → acorex-modules-assessment-management-questionnaire-calculation.entity-DNUf5RD3.mjs} +2 -2
  37. package/fesm2022/{acorex-modules-assessment-management-questionnaire-calculation.entity-C7gf4s1y.mjs.map → acorex-modules-assessment-management-questionnaire-calculation.entity-DNUf5RD3.mjs.map} +1 -1
  38. package/fesm2022/{acorex-modules-assessment-management-questionnaire-viewer-popup.component-BZyIlYWg.mjs → acorex-modules-assessment-management-questionnaire-viewer-popup.component-BdBKHvHP.mjs} +3 -3
  39. package/fesm2022/{acorex-modules-assessment-management-questionnaire-viewer-popup.component-BZyIlYWg.mjs.map → acorex-modules-assessment-management-questionnaire-viewer-popup.component-BdBKHvHP.mjs.map} +1 -1
  40. package/fesm2022/{acorex-modules-assessment-management-questionnaire.entity-CmmThk2f.mjs → acorex-modules-assessment-management-questionnaire.entity-B5aP_P4z.mjs} +3 -3
  41. package/fesm2022/{acorex-modules-assessment-management-questionnaire.entity-CmmThk2f.mjs.map → acorex-modules-assessment-management-questionnaire.entity-B5aP_P4z.mjs.map} +1 -1
  42. package/fesm2022/{acorex-modules-assessment-management-save-questionnaire-questions.command-GLqvK8wB.mjs → acorex-modules-assessment-management-save-questionnaire-questions.command-C3Qt5fmY.mjs} +2 -2
  43. package/fesm2022/{acorex-modules-assessment-management-save-questionnaire-questions.command-GLqvK8wB.mjs.map → acorex-modules-assessment-management-save-questionnaire-questions.command-C3Qt5fmY.mjs.map} +1 -1
  44. package/fesm2022/{acorex-modules-assessment-management-view-session-answers.command-CU1TVonZ.mjs → acorex-modules-assessment-management-view-session-answers.command-C9VS-Tp3.mjs} +2 -2
  45. package/fesm2022/{acorex-modules-assessment-management-view-session-answers.command-CU1TVonZ.mjs.map → acorex-modules-assessment-management-view-session-answers.command-C9VS-Tp3.mjs.map} +1 -1
  46. package/fesm2022/acorex-modules-assessment-management.mjs +1 -1
  47. package/fesm2022/{acorex-modules-asset-management-acorex-modules-asset-management-BDs0ZgD5.mjs → acorex-modules-asset-management-acorex-modules-asset-management-F7Ok5dhs.mjs} +519 -81
  48. package/fesm2022/acorex-modules-asset-management-acorex-modules-asset-management-F7Ok5dhs.mjs.map +1 -0
  49. package/fesm2022/{acorex-modules-asset-management-asset-system-history.entity-CSCwWY_F.mjs → acorex-modules-asset-management-asset-system-history.entity-D1HZG9wO.mjs} +2 -2
  50. package/fesm2022/{acorex-modules-asset-management-asset-system-history.entity-CSCwWY_F.mjs.map → acorex-modules-asset-management-asset-system-history.entity-D1HZG9wO.mjs.map} +1 -1
  51. package/fesm2022/{acorex-modules-asset-management-asset-system-type.entity-CcefMT8J.mjs → acorex-modules-asset-management-asset-system-type.entity-DDh5RK5M.mjs} +60 -38
  52. package/fesm2022/acorex-modules-asset-management-asset-system-type.entity-DDh5RK5M.mjs.map +1 -0
  53. package/fesm2022/{acorex-modules-asset-management-asset-type-section-component.entity-6Rauu2Z1.mjs → acorex-modules-asset-management-asset-type-section-component.entity-em7lQ1eu.mjs} +2 -2
  54. package/fesm2022/{acorex-modules-asset-management-asset-type-section-component.entity-6Rauu2Z1.mjs.map → acorex-modules-asset-management-asset-type-section-component.entity-em7lQ1eu.mjs.map} +1 -1
  55. package/fesm2022/{acorex-modules-asset-management-asset-type-section.entity-r_H1QGwp.mjs → acorex-modules-asset-management-asset-type-section.entity-BtcNy6Ra.mjs} +6 -48
  56. package/fesm2022/acorex-modules-asset-management-asset-type-section.entity-BtcNy6Ra.mjs.map +1 -0
  57. package/fesm2022/{acorex-modules-asset-management-asset-type.entity-cWVqpbHH.mjs → acorex-modules-asset-management-asset-type.entity-DWhrFVFI.mjs} +53 -100
  58. package/fesm2022/acorex-modules-asset-management-asset-type.entity-DWhrFVFI.mjs.map +1 -0
  59. package/fesm2022/{acorex-modules-asset-management-asset.entity-CamZGWTM.mjs → acorex-modules-asset-management-asset.entity-BEjXfkPD.mjs} +66 -56
  60. package/fesm2022/acorex-modules-asset-management-asset.entity-BEjXfkPD.mjs.map +1 -0
  61. package/fesm2022/{acorex-modules-asset-management-assetSystem.entity-Dq2ASslk.mjs → acorex-modules-asset-management-assetSystem.entity-CJCVALaz.mjs} +2 -2
  62. package/fesm2022/{acorex-modules-asset-management-assetSystem.entity-Dq2ASslk.mjs.map → acorex-modules-asset-management-assetSystem.entity-CJCVALaz.mjs.map} +1 -1
  63. package/fesm2022/acorex-modules-asset-management.mjs +1 -1
  64. package/fesm2022/acorex-modules-common.mjs +38 -41
  65. package/fesm2022/acorex-modules-common.mjs.map +1 -1
  66. package/fesm2022/acorex-modules-conversation.mjs +1046 -249
  67. package/fesm2022/acorex-modules-conversation.mjs.map +1 -1
  68. package/fesm2022/acorex-modules-dashboard-management.mjs +1098 -706
  69. package/fesm2022/acorex-modules-dashboard-management.mjs.map +1 -1
  70. package/fesm2022/acorex-modules-data-management.mjs +63 -35
  71. package/fesm2022/acorex-modules-data-management.mjs.map +1 -1
  72. package/fesm2022/acorex-modules-document-management.mjs +101 -57
  73. package/fesm2022/acorex-modules-document-management.mjs.map +1 -1
  74. package/fesm2022/{acorex-modules-human-capital-management-employee.entity-BRpqFRuI.mjs → acorex-modules-human-capital-management-employee.entity-BmF6_P6d.mjs} +48 -21
  75. package/fesm2022/acorex-modules-human-capital-management-employee.entity-BmF6_P6d.mjs.map +1 -0
  76. package/fesm2022/acorex-modules-human-capital-management.mjs +1 -1
  77. package/fesm2022/acorex-modules-location-management.mjs +18 -99
  78. package/fesm2022/acorex-modules-location-management.mjs.map +1 -1
  79. package/fesm2022/acorex-modules-maintenance-management-acorex-modules-maintenance-management-DtODwbIN.mjs +7137 -0
  80. package/fesm2022/acorex-modules-maintenance-management-acorex-modules-maintenance-management-DtODwbIN.mjs.map +1 -0
  81. package/fesm2022/{acorex-modules-maintenance-management-failure-effect.entity-DQJJtCqU.mjs → acorex-modules-maintenance-management-failure-effect.entity-BtczD4wu.mjs} +2 -2
  82. package/fesm2022/{acorex-modules-maintenance-management-failure-effect.entity-DQJJtCqU.mjs.map → acorex-modules-maintenance-management-failure-effect.entity-BtczD4wu.mjs.map} +1 -1
  83. package/fesm2022/{acorex-modules-maintenance-management-failure-mode-asset-type.entity-gg2fpT2N.mjs → acorex-modules-maintenance-management-failure-mode-asset-type.entity-CDUdEH-e.mjs} +2 -2
  84. package/fesm2022/{acorex-modules-maintenance-management-failure-mode-asset-type.entity-gg2fpT2N.mjs.map → acorex-modules-maintenance-management-failure-mode-asset-type.entity-CDUdEH-e.mjs.map} +1 -1
  85. package/fesm2022/{acorex-modules-maintenance-management-failure-mode-mechanism.entity-CHUaAnID.mjs → acorex-modules-maintenance-management-failure-mode-mechanism.entity-re5UvGp7.mjs} +2 -2
  86. package/fesm2022/{acorex-modules-maintenance-management-failure-mode-mechanism.entity-CHUaAnID.mjs.map → acorex-modules-maintenance-management-failure-mode-mechanism.entity-re5UvGp7.mjs.map} +1 -1
  87. package/fesm2022/{acorex-modules-maintenance-management-failure-mode-solution.entity-B93x1uP_.mjs → acorex-modules-maintenance-management-failure-mode-solution.entity-nbFz4LAe.mjs} +2 -2
  88. package/fesm2022/{acorex-modules-maintenance-management-failure-mode-solution.entity-B93x1uP_.mjs.map → acorex-modules-maintenance-management-failure-mode-solution.entity-nbFz4LAe.mjs.map} +1 -1
  89. package/fesm2022/{acorex-modules-maintenance-management-failure-register-cause.entity-McM3l12Q.mjs → acorex-modules-maintenance-management-failure-register-cause.entity-CW2NlX59.mjs} +2 -2
  90. package/fesm2022/{acorex-modules-maintenance-management-failure-register-cause.entity-McM3l12Q.mjs.map → acorex-modules-maintenance-management-failure-register-cause.entity-CW2NlX59.mjs.map} +1 -1
  91. package/fesm2022/{acorex-modules-maintenance-management-failure-register-effect.entity-_jjy1oeg.mjs → acorex-modules-maintenance-management-failure-register-effect.entity-Bi5XgfoL.mjs} +2 -2
  92. package/fesm2022/{acorex-modules-maintenance-management-failure-register-effect.entity-_jjy1oeg.mjs.map → acorex-modules-maintenance-management-failure-register-effect.entity-Bi5XgfoL.mjs.map} +1 -1
  93. package/fesm2022/{acorex-modules-maintenance-management-failure-register-mechanism.entity-5CmdhowW.mjs → acorex-modules-maintenance-management-failure-register-mechanism.entity-DcW6sK01.mjs} +2 -2
  94. package/fesm2022/{acorex-modules-maintenance-management-failure-register-mechanism.entity-5CmdhowW.mjs.map → acorex-modules-maintenance-management-failure-register-mechanism.entity-DcW6sK01.mjs.map} +1 -1
  95. package/fesm2022/{acorex-modules-maintenance-management-failure-register.entity-D_lQrda5.mjs → acorex-modules-maintenance-management-failure-register.entity-CUxVZo0w.mjs} +3 -3
  96. package/fesm2022/acorex-modules-maintenance-management-failure-register.entity-CUxVZo0w.mjs.map +1 -0
  97. package/fesm2022/{acorex-modules-maintenance-management-failure-severity.entity-BIZxoVIS.mjs → acorex-modules-maintenance-management-failure-severity.entity-B7LBO-UA.mjs} +2 -2
  98. package/fesm2022/{acorex-modules-maintenance-management-failure-severity.entity-BIZxoVIS.mjs.map → acorex-modules-maintenance-management-failure-severity.entity-B7LBO-UA.mjs.map} +1 -1
  99. package/fesm2022/acorex-modules-maintenance-management-maintenance-template.entity-D6ATa-HR.mjs +443 -0
  100. package/fesm2022/acorex-modules-maintenance-management-maintenance-template.entity-D6ATa-HR.mjs.map +1 -0
  101. package/fesm2022/acorex-modules-maintenance-management.mjs +1 -3579
  102. package/fesm2022/acorex-modules-maintenance-management.mjs.map +1 -1
  103. package/fesm2022/acorex-modules-notification-management.mjs +11 -5
  104. package/fesm2022/acorex-modules-notification-management.mjs.map +1 -1
  105. package/fesm2022/acorex-modules-organization-management-acorex-modules-organization-management-BrVNMCi_.mjs +356 -0
  106. package/fesm2022/acorex-modules-organization-management-acorex-modules-organization-management-BrVNMCi_.mjs.map +1 -0
  107. package/fesm2022/acorex-modules-organization-management-business-unit-type.entity-CO8jMwVJ.mjs +181 -0
  108. package/fesm2022/acorex-modules-organization-management-business-unit-type.entity-CO8jMwVJ.mjs.map +1 -0
  109. package/fesm2022/acorex-modules-organization-management-business-unit.entity-WiTemBLu.mjs +359 -0
  110. package/fesm2022/acorex-modules-organization-management-business-unit.entity-WiTemBLu.mjs.map +1 -0
  111. package/fesm2022/{acorex-modules-organization-management-chart.entity-bRxA8XHZ.mjs → acorex-modules-organization-management-chart.entity-D6Y7kZfM.mjs} +33 -29
  112. package/fesm2022/acorex-modules-organization-management-chart.entity-D6Y7kZfM.mjs.map +1 -0
  113. package/fesm2022/{acorex-modules-organization-management-company.entity-BohMJQNi.mjs → acorex-modules-organization-management-company.entity-wpNiu8g3.mjs} +6 -8
  114. package/fesm2022/acorex-modules-organization-management-company.entity-wpNiu8g3.mjs.map +1 -0
  115. package/fesm2022/acorex-modules-organization-management-data-source-evaluator-scope.provider-BrKtojM9.mjs +48 -0
  116. package/fesm2022/acorex-modules-organization-management-data-source-evaluator-scope.provider-BrKtojM9.mjs.map +1 -0
  117. package/fesm2022/acorex-modules-organization-management-entity.provider-B0XbUW1I.mjs +59 -0
  118. package/fesm2022/acorex-modules-organization-management-entity.provider-B0XbUW1I.mjs.map +1 -0
  119. package/fesm2022/acorex-modules-organization-management-feature-definition.provider-D7t_nNNk.mjs +19 -0
  120. package/fesm2022/acorex-modules-organization-management-feature-definition.provider-D7t_nNNk.mjs.map +1 -0
  121. package/fesm2022/{acorex-modules-organization-management-job-definition.entity-S9Jlmr-o.mjs → acorex-modules-organization-management-job-definition.entity-Cb6zEf65.mjs} +2 -2
  122. package/fesm2022/{acorex-modules-organization-management-job-definition.entity-S9Jlmr-o.mjs.map → acorex-modules-organization-management-job-definition.entity-Cb6zEf65.mjs.map} +1 -1
  123. package/fesm2022/acorex-modules-organization-management-job-level.datasource-RDGmLrqD.mjs +95 -0
  124. package/fesm2022/acorex-modules-organization-management-job-level.datasource-RDGmLrqD.mjs.map +1 -0
  125. package/fesm2022/acorex-modules-organization-management-job-level.entity-oedF18Xm.mjs +274 -0
  126. package/fesm2022/acorex-modules-organization-management-job-level.entity-oedF18Xm.mjs.map +1 -0
  127. package/fesm2022/acorex-modules-organization-management-menu.provider-DAKmAxld.mjs +193 -0
  128. package/fesm2022/acorex-modules-organization-management-menu.provider-DAKmAxld.mjs.map +1 -0
  129. package/fesm2022/acorex-modules-organization-management-org-chart.page-mHV0AWGZ.mjs +1081 -0
  130. package/fesm2022/acorex-modules-organization-management-org-chart.page-mHV0AWGZ.mjs.map +1 -0
  131. package/fesm2022/acorex-modules-organization-management-permission-definition.provider-Be8mvS_Z.mjs +77 -0
  132. package/fesm2022/acorex-modules-organization-management-permission-definition.provider-Be8mvS_Z.mjs.map +1 -0
  133. package/fesm2022/acorex-modules-organization-management-permission.keys-DwZNBc12.mjs +56 -0
  134. package/fesm2022/acorex-modules-organization-management-permission.keys-DwZNBc12.mjs.map +1 -0
  135. package/fesm2022/{acorex-modules-organization-management-position.entity-DLPufeWz.mjs → acorex-modules-organization-management-position.entity-BveMCKMd.mjs} +108 -106
  136. package/fesm2022/acorex-modules-organization-management-position.entity-BveMCKMd.mjs.map +1 -0
  137. package/fesm2022/{acorex-modules-organization-management-responsibilities-matrix-widget-edit.component-mMZywr0X.mjs → acorex-modules-organization-management-responsibilities-matrix-widget-edit.component-ivufxxLL.mjs} +25 -29
  138. package/fesm2022/acorex-modules-organization-management-responsibilities-matrix-widget-edit.component-ivufxxLL.mjs.map +1 -0
  139. package/fesm2022/{acorex-modules-organization-management-responsibilities-matrix-widget-view.component-CfRBMxLk.mjs → acorex-modules-organization-management-responsibilities-matrix-widget-view.component-DptdG1Nt.mjs} +2 -2
  140. package/fesm2022/{acorex-modules-organization-management-responsibilities-matrix-widget-view.component-CfRBMxLk.mjs.map → acorex-modules-organization-management-responsibilities-matrix-widget-view.component-DptdG1Nt.mjs.map} +1 -1
  141. package/fesm2022/{acorex-modules-organization-management-responsibilities-matrix.component-B06t1G1E.mjs → acorex-modules-organization-management-responsibilities-matrix.component-qO33kvo_.mjs} +14 -21
  142. package/fesm2022/acorex-modules-organization-management-responsibilities-matrix.component-qO33kvo_.mjs.map +1 -0
  143. package/fesm2022/acorex-modules-organization-management-responsibility-level.entity-zOjyjm5H.mjs +137 -0
  144. package/fesm2022/acorex-modules-organization-management-responsibility-level.entity-zOjyjm5H.mjs.map +1 -0
  145. package/fesm2022/{acorex-modules-organization-management-responsibility.entity-CMmr3wJa.mjs → acorex-modules-organization-management-responsibility.entity-jWEiPi5-.mjs} +2 -2
  146. package/fesm2022/{acorex-modules-organization-management-responsibility.entity-CMmr3wJa.mjs.map → acorex-modules-organization-management-responsibility.entity-jWEiPi5-.mjs.map} +1 -1
  147. package/fesm2022/acorex-modules-organization-management-settings.provider-D3ged-4h.mjs +228 -0
  148. package/fesm2022/acorex-modules-organization-management-settings.provider-D3ged-4h.mjs.map +1 -0
  149. package/fesm2022/{acorex-modules-organization-management-team-member-role.entity-CZ4MibH4.mjs → acorex-modules-organization-management-team-member-role.entity-D9TZoACE.mjs} +68 -8
  150. package/fesm2022/acorex-modules-organization-management-team-member-role.entity-D9TZoACE.mjs.map +1 -0
  151. package/fesm2022/{acorex-modules-organization-management-team-member.entity-8sTjn5Jn.mjs → acorex-modules-organization-management-team-member.entity-Bz4o7c3d.mjs} +2 -2
  152. package/fesm2022/{acorex-modules-organization-management-team-member.entity-8sTjn5Jn.mjs.map → acorex-modules-organization-management-team-member.entity-Bz4o7c3d.mjs.map} +1 -1
  153. package/fesm2022/{acorex-modules-organization-management-team.entity-CGR0UlYl.mjs → acorex-modules-organization-management-team.entity-uVffZPeg.mjs} +100 -37
  154. package/fesm2022/acorex-modules-organization-management-team.entity-uVffZPeg.mjs.map +1 -0
  155. package/fesm2022/acorex-modules-organization-management-widget-definition.provider-D4yjuqwx.mjs +48 -0
  156. package/fesm2022/acorex-modules-organization-management-widget-definition.provider-D4yjuqwx.mjs.map +1 -0
  157. package/fesm2022/acorex-modules-organization-management.mjs +1 -2216
  158. package/fesm2022/acorex-modules-organization-management.mjs.map +1 -1
  159. package/fesm2022/acorex-modules-platform-dev-tools-menu.provider-BFueKnuF.mjs +40 -0
  160. package/fesm2022/acorex-modules-platform-dev-tools-menu.provider-BFueKnuF.mjs.map +1 -0
  161. package/fesm2022/acorex-modules-platform-dev-tools-settings.provider-CGyf-4eq.mjs +33 -0
  162. package/fesm2022/acorex-modules-platform-dev-tools-settings.provider-CGyf-4eq.mjs.map +1 -0
  163. package/fesm2022/acorex-modules-platform-dev-tools.mjs +14 -94
  164. package/fesm2022/acorex-modules-platform-dev-tools.mjs.map +1 -1
  165. package/fesm2022/{acorex-modules-report-management-report-runner-root-page.component-DPSNAAct.mjs → acorex-modules-report-management-report-runner-root-page.component-BjKrHoBg.mjs} +107 -107
  166. package/fesm2022/acorex-modules-report-management-report-runner-root-page.component-BjKrHoBg.mjs.map +1 -0
  167. package/fesm2022/acorex-modules-report-management.mjs +1 -1
  168. package/fesm2022/{acorex-modules-reservation-management-acorex-modules-reservation-management-BMemqW2V.mjs → acorex-modules-reservation-management-acorex-modules-reservation-management-BoUiTlmu.mjs} +65 -76
  169. package/fesm2022/acorex-modules-reservation-management-acorex-modules-reservation-management-BoUiTlmu.mjs.map +1 -0
  170. package/fesm2022/{acorex-modules-reservation-management-reservation-class-status.entity-Bg7d38wV.mjs → acorex-modules-reservation-management-reservation-class-status.entity-D-ZdqKa8.mjs} +2 -2
  171. package/fesm2022/{acorex-modules-reservation-management-reservation-class-status.entity-Bg7d38wV.mjs.map → acorex-modules-reservation-management-reservation-class-status.entity-D-ZdqKa8.mjs.map} +1 -1
  172. package/fesm2022/{acorex-modules-reservation-management-reservation-resource-type.entity-BK-rLEXi.mjs → acorex-modules-reservation-management-reservation-resource-type.entity-zPD-Psml.mjs} +2 -2
  173. package/fesm2022/{acorex-modules-reservation-management-reservation-resource-type.entity-BK-rLEXi.mjs.map → acorex-modules-reservation-management-reservation-resource-type.entity-zPD-Psml.mjs.map} +1 -1
  174. package/fesm2022/{acorex-modules-reservation-management-reservation-status-transition.entity-2ngXhKAV.mjs → acorex-modules-reservation-management-reservation-status-transition.entity-CQ85ZAGF.mjs} +2 -2
  175. package/fesm2022/{acorex-modules-reservation-management-reservation-status-transition.entity-2ngXhKAV.mjs.map → acorex-modules-reservation-management-reservation-status-transition.entity-CQ85ZAGF.mjs.map} +1 -1
  176. package/fesm2022/acorex-modules-reservation-management.mjs +1 -1
  177. package/fesm2022/acorex-modules-security-management.mjs +269 -190
  178. package/fesm2022/acorex-modules-security-management.mjs.map +1 -1
  179. package/fesm2022/{acorex-modules-task-management-task-board.page-C1H_GTqy.mjs → acorex-modules-task-management-task-board.page-DA2563QE.mjs} +15 -10
  180. package/fesm2022/acorex-modules-task-management-task-board.page-DA2563QE.mjs.map +1 -0
  181. package/fesm2022/acorex-modules-task-management.mjs +27 -13
  182. package/fesm2022/acorex-modules-task-management.mjs.map +1 -1
  183. package/fesm2022/acorex-modules-workflow-management-WORKFLOW_DEFINITION_ACTIVITIES_PAGE_COMPONENT_KEY-D6q__Ewd.mjs +5 -0
  184. package/fesm2022/acorex-modules-workflow-management-WORKFLOW_DEFINITION_ACTIVITIES_PAGE_COMPONENT_KEY-D6q__Ewd.mjs.map +1 -0
  185. package/fesm2022/{acorex-modules-workflow-management-activity-command-configurator-widget-column.component-C8lgSjfc.mjs → acorex-modules-workflow-management-activity-command-configurator-widget-column.component-CDo0QVFy.mjs} +14 -6
  186. package/fesm2022/acorex-modules-workflow-management-activity-command-configurator-widget-column.component-CDo0QVFy.mjs.map +1 -0
  187. package/fesm2022/{acorex-modules-workflow-management-activity-command-configurator-widget-edit.component-BGUPxGXP.mjs → acorex-modules-workflow-management-activity-command-configurator-widget-edit.component-BYJpDQRs.mjs} +31 -16
  188. package/fesm2022/acorex-modules-workflow-management-activity-command-configurator-widget-edit.component-BYJpDQRs.mjs.map +1 -0
  189. package/fesm2022/{acorex-modules-workflow-management-activity-definition.entity-Bvs1OfE_.mjs → acorex-modules-workflow-management-activity-definition.entity-B3DkgDQb.mjs} +10 -12
  190. package/fesm2022/acorex-modules-workflow-management-activity-definition.entity-B3DkgDQb.mjs.map +1 -0
  191. package/fesm2022/{acorex-modules-workflow-management-index-DWIDQsWq.mjs → acorex-modules-workflow-management-index-C9Qc07oK.mjs} +125 -3
  192. package/fesm2022/acorex-modules-workflow-management-index-C9Qc07oK.mjs.map +1 -0
  193. package/fesm2022/acorex-modules-workflow-management-index-D8fjNgQJ.mjs +726 -0
  194. package/fesm2022/acorex-modules-workflow-management-index-D8fjNgQJ.mjs.map +1 -0
  195. package/fesm2022/acorex-modules-workflow-management-index-DMnJRDbq.mjs +294 -0
  196. package/fesm2022/acorex-modules-workflow-management-index-DMnJRDbq.mjs.map +1 -0
  197. package/fesm2022/acorex-modules-workflow-management-save-workflow-definition-activities.command-fFO152ni.mjs +56 -0
  198. package/fesm2022/acorex-modules-workflow-management-save-workflow-definition-activities.command-fFO152ni.mjs.map +1 -0
  199. package/fesm2022/{acorex-modules-workflow-management-workflow-definition.entity-aJou58ED.mjs → acorex-modules-workflow-management-workflow-definition.entity-DqPVpcSv.mjs} +101 -140
  200. package/fesm2022/acorex-modules-workflow-management-workflow-definition.entity-DqPVpcSv.mjs.map +1 -0
  201. package/fesm2022/{acorex-modules-workflow-management-workflow-instance.entity-Cq7LE7u5.mjs → acorex-modules-workflow-management-workflow-instance.entity-sfsoT0is.mjs} +10 -1
  202. package/fesm2022/acorex-modules-workflow-management-workflow-instance.entity-sfsoT0is.mjs.map +1 -0
  203. package/fesm2022/{acorex-modules-workflow-management-workflow-task-popover.component-CIakASVR.mjs → acorex-modules-workflow-management-workflow-task-popover.component-NpUx0sB5.mjs} +11 -7
  204. package/fesm2022/acorex-modules-workflow-management-workflow-task-popover.component-NpUx0sB5.mjs.map +1 -0
  205. package/fesm2022/acorex-modules-workflow-management.mjs +746 -402
  206. package/fesm2022/acorex-modules-workflow-management.mjs.map +1 -1
  207. package/organization-management/README.md +1 -1
  208. package/package.json +2 -2
  209. package/types/acorex-modules-ai-management.d.ts +64 -16
  210. package/types/acorex-modules-asset-management.d.ts +115 -58
  211. package/types/acorex-modules-common.d.ts +2 -4
  212. package/types/acorex-modules-dashboard-management.d.ts +226 -109
  213. package/types/acorex-modules-data-management.d.ts +2 -2
  214. package/types/acorex-modules-document-management.d.ts +1 -2
  215. package/types/acorex-modules-human-capital-management.d.ts +6 -0
  216. package/types/acorex-modules-maintenance-management.d.ts +561 -41
  217. package/types/acorex-modules-notification-management.d.ts +7 -3
  218. package/types/acorex-modules-organization-management.d.ts +52 -107
  219. package/types/acorex-modules-security-management.d.ts +15 -1
  220. package/types/acorex-modules-task-management.d.ts +8 -13
  221. package/types/acorex-modules-workflow-management.d.ts +67 -13
  222. package/fesm2022/acorex-modules-ai-management-acorex-modules-ai-management-WuqoH4OL.mjs.map +0 -1
  223. package/fesm2022/acorex-modules-ai-management-agent.entity-DK9GNMdR.mjs.map +0 -1
  224. package/fesm2022/acorex-modules-ai-management-ai-delegated-agent-transcript-popup.component-CWXEW9yL.mjs.map +0 -1
  225. package/fesm2022/acorex-modules-ai-management-assist-delegated-agent-configurator-widget-edit.component-CNKwIqUE.mjs.map +0 -1
  226. package/fesm2022/acorex-modules-assessment-management-acorex-modules-assessment-management-BNK6C-Ng.mjs.map +0 -1
  227. package/fesm2022/acorex-modules-assessment-management-index-B2SncZAW.mjs.map +0 -1
  228. package/fesm2022/acorex-modules-assessment-management-preview-question.command-DPzL8C44.mjs.map +0 -1
  229. package/fesm2022/acorex-modules-asset-management-acorex-modules-asset-management-BDs0ZgD5.mjs.map +0 -1
  230. package/fesm2022/acorex-modules-asset-management-asset-system-type.entity-CcefMT8J.mjs.map +0 -1
  231. package/fesm2022/acorex-modules-asset-management-asset-type-section.entity-r_H1QGwp.mjs.map +0 -1
  232. package/fesm2022/acorex-modules-asset-management-asset-type.entity-cWVqpbHH.mjs.map +0 -1
  233. package/fesm2022/acorex-modules-asset-management-asset.entity-CamZGWTM.mjs.map +0 -1
  234. package/fesm2022/acorex-modules-human-capital-management-employee.entity-BRpqFRuI.mjs.map +0 -1
  235. package/fesm2022/acorex-modules-maintenance-management-failure-register.entity-D_lQrda5.mjs.map +0 -1
  236. package/fesm2022/acorex-modules-organization-management-business-unit-type.entity-C-EKX6Oy.mjs +0 -91
  237. package/fesm2022/acorex-modules-organization-management-business-unit-type.entity-C-EKX6Oy.mjs.map +0 -1
  238. package/fesm2022/acorex-modules-organization-management-chart.entity-bRxA8XHZ.mjs.map +0 -1
  239. package/fesm2022/acorex-modules-organization-management-company.entity-BohMJQNi.mjs.map +0 -1
  240. package/fesm2022/acorex-modules-organization-management-org-chart.page-eRTHzLDQ.mjs +0 -784
  241. package/fesm2022/acorex-modules-organization-management-org-chart.page-eRTHzLDQ.mjs.map +0 -1
  242. package/fesm2022/acorex-modules-organization-management-position.entity-DLPufeWz.mjs.map +0 -1
  243. package/fesm2022/acorex-modules-organization-management-responsibilities-matrix-widget-edit.component-mMZywr0X.mjs.map +0 -1
  244. package/fesm2022/acorex-modules-organization-management-responsibilities-matrix.component-B06t1G1E.mjs.map +0 -1
  245. package/fesm2022/acorex-modules-organization-management-team-member-role.entity-CZ4MibH4.mjs.map +0 -1
  246. package/fesm2022/acorex-modules-organization-management-team.entity-CGR0UlYl.mjs.map +0 -1
  247. package/fesm2022/acorex-modules-report-management-report-runner-root-page.component-DPSNAAct.mjs.map +0 -1
  248. package/fesm2022/acorex-modules-reservation-management-acorex-modules-reservation-management-BMemqW2V.mjs.map +0 -1
  249. package/fesm2022/acorex-modules-task-management-task-board.page-C1H_GTqy.mjs.map +0 -1
  250. package/fesm2022/acorex-modules-workflow-management-activity-command-configurator-widget-column.component-C8lgSjfc.mjs.map +0 -1
  251. package/fesm2022/acorex-modules-workflow-management-activity-command-configurator-widget-edit.component-BGUPxGXP.mjs.map +0 -1
  252. package/fesm2022/acorex-modules-workflow-management-activity-definition.entity-Bvs1OfE_.mjs.map +0 -1
  253. package/fesm2022/acorex-modules-workflow-management-index-DWIDQsWq.mjs.map +0 -1
  254. package/fesm2022/acorex-modules-workflow-management-workflow-definition.entity-aJou58ED.mjs.map +0 -1
  255. package/fesm2022/acorex-modules-workflow-management-workflow-instance.entity-Cq7LE7u5.mjs.map +0 -1
  256. package/fesm2022/acorex-modules-workflow-management-workflow-task-popover.component-CIakASVR.mjs.map +0 -1
@@ -2045,7 +2045,58 @@ const AXM_CHAT_INFO_BAR_ASSIST_MODEL_ACTION = {
2045
2045
  //#endregion
2046
2046
  //#region ---- Transcript read ----
2047
2047
  /**
2048
- * Reads AI transcript lines from assist message metadata (final `aiTranscript` or streaming `aiTranscriptDraft`).
2048
+ * Reorders assist transcript lines for chat UI: all **think** first, then tool/agent
2049
+ * and `tool`-role results in their original order, then all **text** (final answer).
2050
+ * This matches chronological expectation (agent call and its result appear before the
2051
+ * assistant's closing message).
2052
+ */
2053
+ function axmNormalizeAssistTranscriptForChatUi(input) {
2054
+ if (input.length === 0) {
2055
+ return input;
2056
+ }
2057
+ const thinkParts = [];
2058
+ const textParts = [];
2059
+ const middle = [];
2060
+ for (const m of input) {
2061
+ if (m.role === 'tool' || m.role === 'user' || m.role === 'system') {
2062
+ middle.push(m);
2063
+ continue;
2064
+ }
2065
+ if (m.role !== 'assistant') {
2066
+ middle.push(m);
2067
+ continue;
2068
+ }
2069
+ for (const r of m.responses) {
2070
+ if (r.type === 'think') {
2071
+ thinkParts.push(r.content);
2072
+ }
2073
+ else if (r.type === 'text') {
2074
+ textParts.push(r.content);
2075
+ }
2076
+ else {
2077
+ middle.push({ role: 'assistant', responses: [r] });
2078
+ }
2079
+ }
2080
+ }
2081
+ const out = [];
2082
+ if (thinkParts.length > 0) {
2083
+ out.push({
2084
+ role: 'assistant',
2085
+ responses: [{ type: 'think', content: thinkParts.join('\n\n') }],
2086
+ });
2087
+ }
2088
+ out.push(...middle);
2089
+ if (textParts.length > 0) {
2090
+ out.push({
2091
+ role: 'assistant',
2092
+ responses: [{ type: 'text', content: textParts.join('\n\n') }],
2093
+ });
2094
+ }
2095
+ return out;
2096
+ }
2097
+ /**
2098
+ * Reads AI transcript lines from assist message metadata (final `aiTranscript` or streaming `aiTranscriptDraft`),
2099
+ * in display order for the assist renderer.
2049
2100
  */
2050
2101
  function axmReadAssistAiTranscript(metadata) {
2051
2102
  if (typeof metadata !== 'object' || metadata == null) {
@@ -2055,10 +2106,10 @@ function axmReadAssistAiTranscript(metadata) {
2055
2106
  const final = m['aiTranscript'];
2056
2107
  const draft = m['aiTranscriptDraft'];
2057
2108
  if (Array.isArray(final) && final.length > 0) {
2058
- return final;
2109
+ return axmNormalizeAssistTranscriptForChatUi(final);
2059
2110
  }
2060
2111
  if (Array.isArray(draft) && draft.length > 0) {
2061
- return draft;
2112
+ return axmNormalizeAssistTranscriptForChatUi(draft);
2062
2113
  }
2063
2114
  return null;
2064
2115
  }
@@ -2249,6 +2300,7 @@ function normalizeInput(raw) {
2249
2300
  return (raw ?? '')
2250
2301
  .replace(/\r\n/g, '\n')
2251
2302
  .replace(/<\s*br\s*\/?\s*>/gi, '\n')
2303
+ .replace(/&lt;\s*br\s*\/?\s*&gt;/gi, '\n')
2252
2304
  .replace(/\n?<\s*hr\s*\/?\s*>\n?/gi, '\n\n---\n\n')
2253
2305
  .replace(/\t/g, ' ')
2254
2306
  .trim();
@@ -2487,7 +2539,38 @@ class AXMAssistMessageRendererComponent {
2487
2539
  //#endregion
2488
2540
  //#region ---- Legacy computed ----
2489
2541
  this.isStreaming = computed(() => !!this.readMeta('isStreaming'), ...(ngDevMode ? [{ debugName: "isStreaming" }] : /* istanbul ignore next */ []));
2542
+ /** Phase label for the streaming activity strip (translation key suffix via {@link assistActivityMessageKey}). */
2543
+ this.assistStreamingPhase = computed(() => {
2544
+ if (!this.isStreaming()) {
2545
+ return 'starting';
2546
+ }
2547
+ const tools = this.toolCalls();
2548
+ if (tools.some((t) => t.state === 'running')) {
2549
+ return 'using-tools';
2550
+ }
2551
+ const think = this.streamThink().trim();
2552
+ const text = this.streamText().trim();
2553
+ if (think && !text) {
2554
+ return 'planning';
2555
+ }
2556
+ if (text) {
2557
+ return 'responding';
2558
+ }
2559
+ return 'starting';
2560
+ }, ...(ngDevMode ? [{ debugName: "assistStreamingPhase" }] : /* istanbul ignore next */ []));
2561
+ this.assistActivityMessageKey = computed(() => {
2562
+ const phase = this.assistStreamingPhase();
2563
+ return `@conversation:chat.assist-renderer.activity.${phase}`;
2564
+ }, ...(ngDevMode ? [{ debugName: "assistActivityMessageKey" }] : /* istanbul ignore next */ []));
2565
+ this.streamThink = computed(() => {
2566
+ const v = this.readMeta('streamDraftThink');
2567
+ return typeof v === 'string' ? v : '';
2568
+ }, ...(ngDevMode ? [{ debugName: "streamThink" }] : /* istanbul ignore next */ []));
2490
2569
  this.streamText = computed(() => {
2570
+ const d = this.readMeta('streamDraftText');
2571
+ if (typeof d === 'string' && d.length > 0) {
2572
+ return d;
2573
+ }
2491
2574
  const text = this.message().payload?.['text'];
2492
2575
  return typeof text === 'string' ? text : '';
2493
2576
  }, ...(ngDevMode ? [{ debugName: "streamText" }] : /* istanbul ignore next */ []));
@@ -2544,6 +2627,60 @@ class AXMAssistMessageRendererComponent {
2544
2627
  isDelegatedAgentCommand(command) {
2545
2628
  return axpAiParseSupervisorAgentToolName(command) != null;
2546
2629
  }
2630
+ delegatedAnswerFromToolResult(resultLine) {
2631
+ if (!resultLine) {
2632
+ return '';
2633
+ }
2634
+ const raw = axpAiChatToolOrAgentResultBodyJson(resultLine);
2635
+ try {
2636
+ const o = JSON.parse(raw);
2637
+ if (o['success'] === false) {
2638
+ const err = o['error'];
2639
+ return typeof err === 'string' && err.trim() ? err.trim() : 'Request failed.';
2640
+ }
2641
+ const data = o['data'];
2642
+ if (data != null && typeof data === 'object' && !Array.isArray(data)) {
2643
+ const answer = data['answer'];
2644
+ if (typeof answer === 'string' && answer.trim()) {
2645
+ return answer.trim();
2646
+ }
2647
+ }
2648
+ }
2649
+ catch {
2650
+ return raw.trim();
2651
+ }
2652
+ return raw.trim() ? raw : '';
2653
+ }
2654
+ /**
2655
+ * Parses the same agent JSON body shape as {@link delegatedAnswerFromToolResult} from raw tool `output` stored in metadata.
2656
+ */
2657
+ delegatedAnswerFromToolOutputString(output) {
2658
+ if (!output?.trim()) {
2659
+ return '';
2660
+ }
2661
+ const raw = output.trim();
2662
+ try {
2663
+ const o = JSON.parse(raw);
2664
+ if (o['success'] === false) {
2665
+ const err = o['error'];
2666
+ return typeof err === 'string' && err.trim() ? err.trim() : 'Request failed.';
2667
+ }
2668
+ const data = o['data'];
2669
+ if (data != null && typeof data === 'object' && !Array.isArray(data)) {
2670
+ const answer = data['answer'];
2671
+ if (typeof answer === 'string' && answer.trim()) {
2672
+ return answer.trim();
2673
+ }
2674
+ }
2675
+ }
2676
+ catch {
2677
+ return raw;
2678
+ }
2679
+ return raw;
2680
+ }
2681
+ delegatedAgentAnswerForCall(res) {
2682
+ return this.delegatedAnswerFromToolResult(res);
2683
+ }
2547
2684
  formatFallbackSegment(seg) {
2548
2685
  try {
2549
2686
  return JSON.stringify(seg, null, 2);
@@ -2555,6 +2692,66 @@ class AXMAssistMessageRendererComponent {
2555
2692
  formatToolResultBody(line) {
2556
2693
  return this.formatJson(axpAiChatToolOrAgentResultBodyJson(line));
2557
2694
  }
2695
+ assistThinkKey(lineIndex, segIndex) {
2696
+ return `think:${lineIndex}-${segIndex}`;
2697
+ }
2698
+ assistThinkStreamKey() {
2699
+ return 'think:stream';
2700
+ }
2701
+ assistThinkFinalKey() {
2702
+ return 'think:final';
2703
+ }
2704
+ assistAgentKey(callId) {
2705
+ return `agent:${(callId ?? '').trim() || 'unknown'}`;
2706
+ }
2707
+ assistToolKey(callId) {
2708
+ return `tool:${(callId ?? '').trim() || 'unknown'}`;
2709
+ }
2710
+ assistLegacyToolAccordionKey(tc) {
2711
+ return this.isDelegatedAgentCommand(tc.name) ? this.assistAgentKey(tc.id) : this.assistToolKey(tc.id);
2712
+ }
2713
+ onAssistLegacyAccordionClick(event, tc) {
2714
+ this.onAssistAccordionClick(event, this.assistLegacyToolAccordionKey(tc));
2715
+ }
2716
+ /**
2717
+ * Accordion is collapsed by default; open only when the user has persisted `open: true` for this key.
2718
+ */
2719
+ assistSectionIsCollapsed(key) {
2720
+ return !this.isAssistSectionOpen(key);
2721
+ }
2722
+ isAssistSectionOpen(key) {
2723
+ const m = this.message().metadata;
2724
+ if (typeof m !== 'object' || m == null) {
2725
+ return false;
2726
+ }
2727
+ const assistUi = m['assistUi'];
2728
+ return assistUi?.openByKey?.[key] === true;
2729
+ }
2730
+ onAssistAccordionClick(event, key) {
2731
+ const c = event?.component;
2732
+ if (!c) {
2733
+ return;
2734
+ }
2735
+ const open = !c.isCollapsed();
2736
+ void this.persistAssistUiOpenKey(key, open);
2737
+ }
2738
+ async persistAssistUiOpenKey(key, open) {
2739
+ const message = this.message();
2740
+ const prev = (message.metadata ?? {});
2741
+ const prevUi = prev['assistUi'] ?? {};
2742
+ const openByKey = { ...(prevUi.openByKey ?? {}) };
2743
+ if (open) {
2744
+ openByKey[key] = true;
2745
+ }
2746
+ else {
2747
+ delete openByKey[key];
2748
+ }
2749
+ const nextMeta = { ...prev, assistUi: { ...prevUi, openByKey } };
2750
+ const updated = { ...message, metadata: nextMeta };
2751
+ conversationSharedStorage.messages.set(updated.id, updated);
2752
+ await axConversationIndexedDbStorage.putMessage(updated);
2753
+ conversationSharedStorage.messageUpdates$.next(updated);
2754
+ }
2558
2755
  //#endregion
2559
2756
  //#region ---- Formatters ----
2560
2757
  formatArgs(args) {
@@ -2656,21 +2853,71 @@ class AXMAssistMessageRendererComponent {
2656
2853
  <div class="axm-assist-bot__segment" [attr.dir]="segmentDir(seg.content)">
2657
2854
  <ax-conversation-text-renderer [message]="syntheticTextMessage(lineIndex, segIndex, seg.content)" />
2658
2855
  </div>
2856
+ } @else if (line.role === 'assistant' && seg.type === 'think') {
2857
+ <div class="axm-assist-renderer__accordion-group" axAccordionGroup [accordion]="false">
2858
+ <div
2859
+ class="axm-assist-renderer__thinking-accordion !ax-mb-0"
2860
+ axAccordionItem
2861
+ #thinkAcc="axAccordionItem"
2862
+ [isCollapsed]="assistSectionIsCollapsed(assistThinkKey(lineIndex, segIndex))"
2863
+ (onClick)="onAssistAccordionClick($event, assistThinkKey(lineIndex, segIndex))"
2864
+ >
2865
+ <div
2866
+ class="axm-assist-renderer__accordion-header axm-assist-renderer__accordion-header--thinking"
2867
+ axAccordionItemHeader
2868
+ role="button"
2869
+ [attr.aria-expanded]="!thinkAcc.isCollapsed()"
2870
+ >
2871
+ <div class="axm-assist-renderer__accordion-header-main">
2872
+ <span class="axm-assist-renderer__accordion-header-title">
2873
+ <i
2874
+ class="fa-light fa-chevron-down axm-assist-renderer__thinking-chevron"
2875
+ [class.axm-assist-renderer__thinking-chevron--expanded]="!thinkAcc.isCollapsed()"
2876
+ aria-hidden="true"
2877
+ ></i>
2878
+ {{ '@conversation:chat.assist-renderer.sections.thinking' | translate | async }}
2879
+ </span>
2880
+ </div>
2881
+ <ax-badge
2882
+ [look]="'twotone'"
2883
+ [text]="('@conversation:chat.assist-renderer.badges.internal' | translate | async) ?? ''"
2884
+ [color]="'warning'"
2885
+ ></ax-badge>
2886
+ </div>
2887
+ <div axAccordionItemContent>
2888
+ <div
2889
+ class="axm-assist-renderer__thinking-body axm-assist-bot__segment"
2890
+ [attr.dir]="segmentDir(seg.content)"
2891
+ >
2892
+ {{ seg.content }}
2893
+ </div>
2894
+ </div>
2895
+ </div>
2896
+ </div>
2659
2897
  } @else if (line.role === 'assistant' && seg.type === 'text') {
2660
2898
  @let parsedLine = parseAssistLineText(seg.content);
2661
- @if (parsedLine.thinking) {
2899
+ @if (debugModeEnabled() && parsedLine.thinking) {
2662
2900
  <div class="axm-assist-renderer__accordion-group" axAccordionGroup [accordion]="false">
2663
2901
  <div
2664
2902
  class="axm-assist-renderer__thinking-accordion !ax-mb-0"
2665
2903
  axAccordionItem
2666
- [isCollapsed]="true"
2904
+ #thinkAcc="axAccordionItem"
2905
+ [isCollapsed]="assistSectionIsCollapsed(assistThinkKey(lineIndex, segIndex))"
2906
+ (onClick)="onAssistAccordionClick($event, assistThinkKey(lineIndex, segIndex))"
2667
2907
  >
2668
2908
  <div
2669
2909
  class="axm-assist-renderer__accordion-header axm-assist-renderer__accordion-header--thinking"
2670
2910
  axAccordionItemHeader
2911
+ role="button"
2912
+ [attr.aria-expanded]="!thinkAcc.isCollapsed()"
2671
2913
  >
2672
2914
  <div class="axm-assist-renderer__accordion-header-main">
2673
2915
  <span class="axm-assist-renderer__accordion-header-title">
2916
+ <i
2917
+ class="fa-light fa-chevron-down axm-assist-renderer__thinking-chevron"
2918
+ [class.axm-assist-renderer__thinking-chevron--expanded]="!thinkAcc.isCollapsed()"
2919
+ aria-hidden="true"
2920
+ ></i>
2674
2921
  {{ '@conversation:chat.assist-renderer.sections.thinking' | translate | async }}
2675
2922
  </span>
2676
2923
  </div>
@@ -2700,88 +2947,150 @@ class AXMAssistMessageRendererComponent {
2700
2947
  }
2701
2948
  } @else if (
2702
2949
  line.role === 'assistant' &&
2703
- seg.type === 'agent' &&
2704
- debugModeEnabled() &&
2705
- isStreaming() &&
2706
- !toolResultForCallId(seg.callId)
2950
+ (seg.type === 'agent' || seg.type === 'tool') &&
2951
+ isDelegatedAgentCommand(seg.content.command) &&
2952
+ !debugModeEnabled()
2707
2953
  ) {
2708
2954
  @let agLive = toolCallEntryFor(seg.callId);
2709
- <div class="axm-assist-renderer__agent-live-block" role="region">
2710
- <div class="axm-assist-renderer__agent-live-header">
2711
- @if (agLive?.state === 'running') {
2712
- <span
2713
- class="axm-assist-renderer__agent-live-spin ax-inline-block ax-w-3 ax-h-3 ax-rounded-full ax-border-2 ax-border-primary-500 ax-border-t-transparent ax-animate-spin ax-shrink-0"
2714
- aria-hidden="true"
2715
- ></span>
2716
- } @else {
2717
- <span
2718
- class="ax-inline-block ax-w-3 ax-h-3 ax-rounded-full ax-bg-success-500 ax-shrink-0"
2719
- aria-hidden="true"
2720
- ></span>
2721
- }
2722
- <span class="axm-assist-renderer__agent-live-title">{{
2723
- resolveToolDisplayTitle(seg.content.command)
2724
- }}</span>
2725
- <ax-badge
2726
- [look]="'twotone'"
2727
- [text]="
2728
- (resolveToolBadge(
2729
- seg.content.command,
2730
- agLive?.state === 'running'
2731
- ? '@conversation:chat.assist-renderer.badges.running'
2732
- : '@conversation:chat.assist-renderer.badges.agent'
2733
- ) | translate | async) ?? ''
2734
- "
2735
- [color]="agLive?.state === 'running' ? 'primary' : 'success'"
2736
- ></ax-badge>
2737
- </div>
2955
+ @let res = toolResultForCallId(seg.callId);
2956
+ @let agentAnswerText = delegatedAgentAnswerForCall(res);
2957
+ <div class="axm-assist-renderer__accordion-group" axAccordionGroup [accordion]="false">
2738
2958
  <div
2739
- class="axm-assist-renderer__agent-live-prompt"
2740
- [attr.dir]="segmentDir(delegatedPromptPreview(seg.content.arguments))"
2959
+ class="axm-assist-renderer__tool-card axm-assist-renderer__agent-accordion !ax-mb-0"
2960
+ axAccordionItem
2961
+ #agentAcc="axAccordionItem"
2962
+ [isCollapsed]="assistSectionIsCollapsed(assistAgentKey(seg.callId))"
2963
+ (onClick)="onAssistAccordionClick($event, assistAgentKey(seg.callId))"
2741
2964
  >
2742
- {{ delegatedPromptPreview(seg.content.arguments) }}
2743
- </div>
2744
- @if (agLive?.nestedStreamText?.trim()) {
2745
2965
  <div
2746
- class="axm-assist-renderer__agent-live-stream"
2747
- [attr.dir]="segmentDir(agLive?.nestedStreamText ?? '')"
2966
+ class="axm-assist-renderer__accordion-header"
2967
+ axAccordionItemHeader
2968
+ role="button"
2969
+ [attr.aria-expanded]="!agentAcc.isCollapsed()"
2748
2970
  >
2749
- {{ agLive?.nestedStreamText }}
2750
- </div>
2751
- }
2752
- @if (agLive?.nestedTools?.length) {
2753
- <div class="axm-assist-renderer__agent-live-nested-tools">
2754
- @for (nt of agLive?.nestedTools ?? []; track nt.id) {
2755
- <div class="axm-assist-renderer__agent-live-nested-row">
2756
- @if (nt.state === 'running') {
2971
+ <div class="axm-assist-renderer__accordion-header-main">
2972
+ <span
2973
+ class="axm-assist-renderer__accordion-header-title ax-inline-flex ax-items-center ax-gap-2 ax-flex-wrap"
2974
+ >
2975
+ <i
2976
+ class="fa-light fa-chevron-down axm-assist-renderer__thinking-chevron"
2977
+ [class.axm-assist-renderer__thinking-chevron--expanded]="!agentAcc.isCollapsed()"
2978
+ aria-hidden="true"
2979
+ ></i>
2980
+ @if (agLive?.state === 'running') {
2757
2981
  <span
2758
- class="ax-inline-block ax-w-2.5 ax-h-2.5 ax-rounded-full ax-border-2 ax-border-primary-500 ax-border-t-transparent ax-animate-spin ax-shrink-0"
2982
+ class="axm-assist-renderer__agent-live-spin ax-inline-block ax-w-3 ax-h-3 ax-rounded-full ax-border-2 ax-border-primary-500 ax-border-t-transparent ax-animate-spin ax-shrink-0"
2759
2983
  aria-hidden="true"
2760
2984
  ></span>
2761
2985
  } @else {
2762
2986
  <span
2763
- class="ax-inline-block ax-w-2.5 ax-h-2.5 ax-rounded-full ax-bg-success-500 ax-shrink-0"
2987
+ class="ax-inline-block ax-w-3 ax-h-3 ax-rounded-full ax-bg-success-500 ax-shrink-0"
2764
2988
  aria-hidden="true"
2765
2989
  ></span>
2766
2990
  }
2767
- <code class="axm-assist-renderer__agent-live-nested-name">{{ nt.name }}</code>
2768
- <span class="axm-assist-renderer__agent-live-nested-status">{{
2769
- nt.state === 'running' ? '…' : '✓'
2991
+ <i class="fa-light fa-people-group ax-text-primary-500" aria-hidden="true"></i>
2992
+ <span class="axm-assist-renderer__agent-live-title">{{
2993
+ resolveToolDisplayTitle(seg.content.command)
2770
2994
  }}</span>
2995
+ </span>
2996
+ </div>
2997
+ <ax-badge
2998
+ [look]="'twotone'"
2999
+ [text]="
3000
+ (resolveToolBadge(
3001
+ seg.content.command,
3002
+ agLive?.state === 'running'
3003
+ ? '@conversation:chat.assist-renderer.badges.running'
3004
+ : '@conversation:chat.assist-renderer.badges.agent'
3005
+ ) | translate | async) ?? ''
3006
+ "
3007
+ [color]="agLive?.state === 'running' ? 'primary' : 'success'"
3008
+ ></ax-badge>
3009
+ </div>
3010
+ <div axAccordionItemContent>
3011
+ <div
3012
+ class="axm-assist-renderer__agent-live-block axm-assist-renderer__agent-live-block--in-accordion"
3013
+ role="region"
3014
+ >
3015
+ <div
3016
+ class="axm-assist-renderer__agent-live-prompt"
3017
+ [attr.dir]="segmentDir(delegatedPromptPreview(seg.content.arguments))"
3018
+ >
3019
+ {{ delegatedPromptPreview(seg.content.arguments) }}
2771
3020
  </div>
2772
- }
3021
+ @if (agLive?.nestedStreamText?.trim()) {
3022
+ <div
3023
+ class="axm-assist-renderer__agent-live-stream"
3024
+ [attr.dir]="segmentDir(agLive?.nestedStreamText ?? '')"
3025
+ >
3026
+ {{ agLive?.nestedStreamText }}
3027
+ </div>
3028
+ }
3029
+ @if (agLive?.nestedTools?.length) {
3030
+ <div class="axm-assist-renderer__agent-live-nested-tools">
3031
+ @for (nt of agLive?.nestedTools ?? []; track nt.id) {
3032
+ <div class="axm-assist-renderer__agent-live-nested-row">
3033
+ @if (nt.state === 'running') {
3034
+ <span
3035
+ class="ax-inline-block ax-w-2.5 ax-h-2.5 ax-rounded-full ax-border-2 ax-border-primary-500 ax-border-t-transparent ax-animate-spin ax-shrink-0"
3036
+ aria-hidden="true"
3037
+ ></span>
3038
+ } @else {
3039
+ <span
3040
+ class="ax-inline-block ax-w-2.5 ax-h-2.5 ax-rounded-full ax-bg-success-500 ax-shrink-0"
3041
+ aria-hidden="true"
3042
+ ></span>
3043
+ }
3044
+ <code class="axm-assist-renderer__agent-live-nested-name">{{ nt.name }}</code>
3045
+ <span class="axm-assist-renderer__agent-live-nested-status">{{
3046
+ nt.state === 'running' ? '…' : '✓'
3047
+ }}</span>
3048
+ </div>
3049
+ }
3050
+ </div>
3051
+ }
3052
+ @if (agentAnswerText) {
3053
+ <div class="axm-assist-renderer__agent-live-nested-tools">
3054
+ <div class="axm-assist-renderer__tool-section-label">
3055
+ {{ '@conversation:chat.assist-renderer.sections.agent-answer' | translate | async }}
3056
+ </div>
3057
+ <div
3058
+ class="axm-assist-renderer__agent-live-stream"
3059
+ [attr.dir]="segmentDir(agentAnswerText)"
3060
+ >
3061
+ {{ agentAnswerText }}
3062
+ </div>
3063
+ </div>
3064
+ }
3065
+ </div>
2773
3066
  </div>
2774
- }
3067
+ </div>
2775
3068
  </div>
2776
- } @else if (line.role === 'assistant' && seg.type === 'agent' && debugModeEnabled()) {
3069
+ } @else if (
3070
+ line.role === 'assistant' &&
3071
+ (seg.type === 'agent' || seg.type === 'tool') &&
3072
+ isDelegatedAgentCommand(seg.content.command) &&
3073
+ debugModeEnabled()
3074
+ ) {
2777
3075
  <div class="axm-assist-renderer__accordion-group" axAccordionGroup [accordion]="false">
2778
- <div class="axm-assist-renderer__tool-card !ax-mb-0" axAccordionItem [isCollapsed]="true">
3076
+ <div
3077
+ class="axm-assist-renderer__tool-card !ax-mb-0"
3078
+ axAccordionItem
3079
+ #agentDebugAcc="axAccordionItem"
3080
+ [isCollapsed]="assistSectionIsCollapsed(assistAgentKey(seg.callId))"
3081
+ (onClick)="onAssistAccordionClick($event, assistAgentKey(seg.callId))"
3082
+ >
2779
3083
  <div class="axm-assist-renderer__accordion-header" axAccordionItemHeader>
2780
3084
  <div class="axm-assist-renderer__accordion-header-main">
2781
3085
  <span class="axm-assist-renderer__accordion-header-title">
3086
+ <i
3087
+ class="fa-light fa-chevron-down axm-assist-renderer__thinking-chevron"
3088
+ [class.axm-assist-renderer__thinking-chevron--expanded]="!agentDebugAcc.isCollapsed()"
3089
+ aria-hidden="true"
3090
+ ></i>
2782
3091
  <i class="fa-light fa-screwdriver-wrench axm-assist-renderer__tool-title-icon"></i>
2783
3092
  {{ resolveToolDisplayTitle(seg.content.command) }}
2784
- </span>
3093
+ </span>d
2785
3094
  </div>
2786
3095
  <span
2787
3096
  class="axm-assist-renderer__accordion-header-badge axm-assist-renderer__accordion-header-badge--primary"
@@ -2829,12 +3138,42 @@ class AXMAssistMessageRendererComponent {
2829
3138
  </div>
2830
3139
  </div>
2831
3140
  </div>
3141
+ } @else if (line.role === 'assistant' && seg.type === 'tool' && !debugModeEnabled()) {
3142
+ @let tc = toolCallEntryFor(seg.callId);
3143
+ <div
3144
+ class="axm-assist-renderer__tool-compact ax-flex ax-items-center ax-gap-2 ax-rounded-md ax-border ax-border-default/50 ax-bg-default-50/40 ax-px-2 ax-py-1.5 ax-text-sm"
3145
+ role="status"
3146
+ [attr.aria-label]="resolveToolDisplayTitle(seg.content.command)"
3147
+ >
3148
+ @if (tc?.state === 'running') {
3149
+ <span
3150
+ class="ax-inline-block ax-w-2.5 ax-h-2.5 ax-rounded-full ax-border-2 ax-border-primary-500 ax-border-t-transparent ax-animate-spin ax-shrink-0"
3151
+ aria-hidden="true"
3152
+ ></span>
3153
+ } @else {
3154
+ <i class="fa-light fa-check ax-text-success-500 ax-shrink-0" aria-hidden="true"></i>
3155
+ }
3156
+ <span class="ax-font-medium ax-min-w-0 ax-truncate">{{
3157
+ resolveToolDisplayTitle(seg.content.command)
3158
+ }}</span>
3159
+ </div>
2832
3160
  } @else if (line.role === 'assistant' && seg.type === 'tool' && debugModeEnabled()) {
2833
3161
  <div class="axm-assist-renderer__accordion-group" axAccordionGroup [accordion]="false">
2834
- <div class="axm-assist-renderer__tool-card !ax-mb-0" axAccordionItem [isCollapsed]="true">
3162
+ <div
3163
+ class="axm-assist-renderer__tool-card !ax-mb-0"
3164
+ axAccordionItem
3165
+ #toolDebugAcc="axAccordionItem"
3166
+ [isCollapsed]="assistSectionIsCollapsed(assistToolKey(seg.callId))"
3167
+ (onClick)="onAssistAccordionClick($event, assistToolKey(seg.callId))"
3168
+ >
2835
3169
  <div class="axm-assist-renderer__accordion-header" axAccordionItemHeader>
2836
3170
  <div class="axm-assist-renderer__accordion-header-main">
2837
3171
  <span class="axm-assist-renderer__accordion-header-title">
3172
+ <i
3173
+ class="fa-light fa-chevron-down axm-assist-renderer__thinking-chevron"
3174
+ [class.axm-assist-renderer__thinking-chevron--expanded]="!toolDebugAcc.isCollapsed()"
3175
+ aria-hidden="true"
3176
+ ></i>
2838
3177
  <i class="fa-light fa-screwdriver-wrench axm-assist-renderer__tool-title-icon"></i>
2839
3178
  {{ resolveToolDisplayTitle(seg.content.command) }}
2840
3179
  </span>
@@ -2900,8 +3239,6 @@ class AXMAssistMessageRendererComponent {
2900
3239
  />
2901
3240
  } @else if (line.role === 'tool' && (seg.type === 'tool_result' || seg.type === 'agent_result')) {
2902
3241
  <!-- merged into the corresponding tool/agent accordion -->
2903
- } @else if (line.role === 'assistant' && (seg.type === 'tool' || seg.type === 'agent')) {
2904
- <!-- hidden when debug mode is disabled -->
2905
3242
  } @else if (line.role === 'system' && seg.type === 'text') {
2906
3243
  <div class="axm-assist-bot__segment" [attr.dir]="segmentDir(seg.content)">
2907
3244
  <ax-conversation-text-renderer [message]="syntheticTextMessage(lineIndex, segIndex, seg.content)" />
@@ -2918,94 +3255,214 @@ class AXMAssistMessageRendererComponent {
2918
3255
  </div>
2919
3256
  }
2920
3257
  @if (isStreaming()) {
3258
+ <div class="axm-assist-renderer__streaming-activity" role="status" aria-live="polite">
3259
+ <span
3260
+ class="axm-assist-renderer__activity-spin ax-inline-block ax-w-3 ax-h-3 ax-rounded-full ax-border-2 ax-border-primary-500 ax-border-t-transparent ax-animate-spin ax-shrink-0"
3261
+ aria-hidden="true"
3262
+ ></span>
3263
+ <span class="axm-assist-renderer__activity-label ax-text-xs ax-text-muted ax-italic">{{
3264
+ assistActivityMessageKey() | translate | async
3265
+ }}</span>
3266
+ </div>
3267
+ }
3268
+ @if (isStreaming() && streamText().trim()) {
2921
3269
  <span class="axm-assist-renderer__cursor" aria-hidden="true"></span>
2922
3270
  }
2923
3271
  </div>
2924
3272
  } @else {
2925
3273
  @if (isStreaming()) {
2926
3274
  <div class="axm-assist-renderer__stream-content">
3275
+ <div class="axm-assist-renderer__streaming-activity" role="status" aria-live="polite">
3276
+ <span
3277
+ class="axm-assist-renderer__activity-spin ax-inline-block ax-w-3 ax-h-3 ax-rounded-full ax-border-2 ax-border-primary-500 ax-border-t-transparent ax-animate-spin ax-shrink-0"
3278
+ aria-hidden="true"
3279
+ ></span>
3280
+ <span class="axm-assist-renderer__activity-label ax-text-xs ax-text-muted ax-italic">{{
3281
+ assistActivityMessageKey() | translate | async
3282
+ }}</span>
3283
+ </div>
3284
+ @if (streamThink().trim()) {
3285
+ <div class="axm-assist-renderer__accordion-group" axAccordionGroup [accordion]="false">
3286
+ <div
3287
+ class="axm-assist-renderer__thinking-accordion !ax-mb-0"
3288
+ axAccordionItem
3289
+ #thinkAcc="axAccordionItem"
3290
+ [isCollapsed]="assistSectionIsCollapsed(assistThinkStreamKey())"
3291
+ (onClick)="onAssistAccordionClick($event, assistThinkStreamKey())"
3292
+ >
3293
+ <div
3294
+ class="axm-assist-renderer__accordion-header axm-assist-renderer__accordion-header--thinking"
3295
+ axAccordionItemHeader
3296
+ role="button"
3297
+ [attr.aria-expanded]="!thinkAcc.isCollapsed()"
3298
+ >
3299
+ <div class="axm-assist-renderer__accordion-header-main">
3300
+ <span class="axm-assist-renderer__accordion-header-title">
3301
+ <i
3302
+ class="fa-light fa-chevron-down axm-assist-renderer__thinking-chevron"
3303
+ [class.axm-assist-renderer__thinking-chevron--expanded]="!thinkAcc.isCollapsed()"
3304
+ aria-hidden="true"
3305
+ ></i>
3306
+ {{ '@conversation:chat.assist-renderer.sections.thinking' | translate | async }}
3307
+ </span>
3308
+ </div>
3309
+ <ax-badge
3310
+ [look]="'twotone'"
3311
+ [text]="('@conversation:chat.assist-renderer.badges.internal' | translate | async) ?? ''"
3312
+ [color]="'warning'"
3313
+ ></ax-badge>
3314
+ </div>
3315
+ <div axAccordionItemContent>
3316
+ <div
3317
+ class="axm-assist-renderer__thinking-body axm-assist-bot__segment"
3318
+ [attr.dir]="segmentDir(streamThink())"
3319
+ >
3320
+ {{ streamThink() }}
3321
+ </div>
3322
+ </div>
3323
+ </div>
3324
+ </div>
3325
+ }
2927
3326
  @if (streamText()) {
2928
3327
  <div class="axm-assist-renderer__text axm-assist-bot__segment" [attr.dir]="segmentDir(streamText())">
2929
3328
  {{ streamText() }}
2930
3329
  </div>
2931
3330
  }
2932
- @if (debugModeEnabled() && toolCalls().length) {
3331
+ @if (toolCalls().length) {
2933
3332
  <div class="axm-assist-renderer__tools">
2934
3333
  @for (tc of toolCalls(); track tc.id) {
2935
- @if (isDelegatedAgentCommand(tc.name) && (tc.state === 'running' || !tc.output?.trim())) {
2936
- <div class="axm-assist-renderer__agent-live-block" role="region">
2937
- <div class="axm-assist-renderer__agent-live-header">
2938
- @if (tc.state === 'running') {
2939
- <span
2940
- class="axm-assist-renderer__agent-live-spin ax-inline-block ax-w-3 ax-h-3 ax-rounded-full ax-border-2 ax-border-primary-500 ax-border-t-transparent ax-animate-spin ax-shrink-0"
2941
- aria-hidden="true"
2942
- ></span>
2943
- } @else {
2944
- <span
2945
- class="ax-inline-block ax-w-3 ax-h-3 ax-rounded-full ax-bg-success-500 ax-shrink-0"
2946
- aria-hidden="true"
2947
- ></span>
2948
- }
2949
- <span class="axm-assist-renderer__agent-live-title">{{
2950
- resolveToolDisplayTitle(tc.name)
2951
- }}</span>
2952
- <ax-badge
2953
- [look]="'twotone'"
2954
- [text]="
2955
- (resolveToolBadge(
2956
- tc.name,
2957
- tc.state === 'running'
2958
- ? '@conversation:chat.assist-renderer.badges.running'
2959
- : '@conversation:chat.assist-renderer.badges.agent'
2960
- ) | translate | async) ?? ''
2961
- "
2962
- [color]="tc.state === 'running' ? 'primary' : 'success'"
2963
- ></ax-badge>
2964
- </div>
3334
+ @if (isDelegatedAgentCommand(tc.name)) {
3335
+ @let legacyAgentAns = delegatedAnswerFromToolOutputString(tc.output);
3336
+ <div class="axm-assist-renderer__accordion-group" axAccordionGroup [accordion]="false">
2965
3337
  <div
2966
- class="axm-assist-renderer__agent-live-prompt"
2967
- [attr.dir]="segmentDir(delegatedPromptPreview(tc.arguments))"
3338
+ class="axm-assist-renderer__tool-card axm-assist-renderer__agent-accordion !ax-mb-0"
3339
+ axAccordionItem
3340
+ #legacyAgentAcc="axAccordionItem"
3341
+ [isCollapsed]="assistSectionIsCollapsed(assistAgentKey(tc.id))"
3342
+ (onClick)="onAssistAccordionClick($event, assistAgentKey(tc.id))"
2968
3343
  >
2969
- {{ delegatedPromptPreview(tc.arguments) }}
2970
- </div>
2971
- @if (tc.nestedStreamText?.trim()) {
2972
3344
  <div
2973
- class="axm-assist-renderer__agent-live-stream"
2974
- [attr.dir]="segmentDir(tc.nestedStreamText ?? '')"
3345
+ class="axm-assist-renderer__accordion-header"
3346
+ axAccordionItemHeader
3347
+ role="button"
3348
+ [attr.aria-expanded]="!legacyAgentAcc.isCollapsed()"
2975
3349
  >
2976
- {{ tc.nestedStreamText }}
2977
- </div>
2978
- }
2979
- @if (tc.nestedTools?.length) {
2980
- <div class="axm-assist-renderer__agent-live-nested-tools">
2981
- @for (nt of tc.nestedTools; track nt.id) {
2982
- <div class="axm-assist-renderer__agent-live-nested-row">
2983
- @if (nt.state === 'running') {
3350
+ <div class="axm-assist-renderer__accordion-header-main">
3351
+ <span
3352
+ class="axm-assist-renderer__accordion-header-title ax-inline-flex ax-items-center ax-gap-2 ax-flex-wrap"
3353
+ >
3354
+ <i
3355
+ class="fa-light fa-chevron-down axm-assist-renderer__thinking-chevron"
3356
+ [class.axm-assist-renderer__thinking-chevron--expanded]="!legacyAgentAcc.isCollapsed()"
3357
+ aria-hidden="true"
3358
+ ></i>
3359
+ @if (tc.state === 'running') {
2984
3360
  <span
2985
- class="ax-inline-block ax-w-2.5 ax-h-2.5 ax-rounded-full ax-border-2 ax-border-primary-500 ax-border-t-transparent ax-animate-spin ax-shrink-0"
3361
+ class="axm-assist-renderer__agent-live-spin ax-inline-block ax-w-3 ax-h-3 ax-rounded-full ax-border-2 ax-border-primary-500 ax-border-t-transparent ax-animate-spin ax-shrink-0"
2986
3362
  aria-hidden="true"
2987
3363
  ></span>
2988
3364
  } @else {
2989
3365
  <span
2990
- class="ax-inline-block ax-w-2.5 ax-h-2.5 ax-rounded-full ax-bg-success-500 ax-shrink-0"
3366
+ class="ax-inline-block ax-w-3 ax-h-3 ax-rounded-full ax-bg-success-500 ax-shrink-0"
2991
3367
  aria-hidden="true"
2992
3368
  ></span>
2993
3369
  }
2994
- <code class="axm-assist-renderer__agent-live-nested-name">{{ nt.name }}</code>
2995
- <span class="axm-assist-renderer__agent-live-nested-status">{{
2996
- nt.state === 'running' ? '…' : '✓'
3370
+ <i class="fa-light fa-people-group ax-text-primary-500" aria-hidden="true"></i>
3371
+ <span class="axm-assist-renderer__agent-live-title">{{
3372
+ resolveToolDisplayTitle(tc.name)
2997
3373
  }}</span>
3374
+ </span>
3375
+ </div>
3376
+ <ax-badge
3377
+ [look]="'twotone'"
3378
+ [text]="
3379
+ (resolveToolBadge(
3380
+ tc.name,
3381
+ tc.state === 'running'
3382
+ ? '@conversation:chat.assist-renderer.badges.running'
3383
+ : '@conversation:chat.assist-renderer.badges.agent'
3384
+ ) | translate | async) ?? ''
3385
+ "
3386
+ [color]="tc.state === 'running' ? 'primary' : 'success'"
3387
+ ></ax-badge>
3388
+ </div>
3389
+ <div axAccordionItemContent>
3390
+ <div
3391
+ class="axm-assist-renderer__agent-live-block axm-assist-renderer__agent-live-block--in-accordion"
3392
+ role="region"
3393
+ >
3394
+ <div
3395
+ class="axm-assist-renderer__agent-live-prompt"
3396
+ [attr.dir]="segmentDir(delegatedPromptPreview(tc.arguments))"
3397
+ >
3398
+ {{ delegatedPromptPreview(tc.arguments) }}
2998
3399
  </div>
2999
- }
3400
+ @if (tc.nestedStreamText?.trim()) {
3401
+ <div
3402
+ class="axm-assist-renderer__agent-live-stream"
3403
+ [attr.dir]="segmentDir(tc.nestedStreamText ?? '')"
3404
+ >
3405
+ {{ tc.nestedStreamText }}
3406
+ </div>
3407
+ }
3408
+ @if (tc.nestedTools?.length) {
3409
+ <div class="axm-assist-renderer__agent-live-nested-tools">
3410
+ @for (nt of tc.nestedTools; track nt.id) {
3411
+ <div class="axm-assist-renderer__agent-live-nested-row">
3412
+ @if (nt.state === 'running') {
3413
+ <span
3414
+ class="ax-inline-block ax-w-2.5 ax-h-2.5 ax-rounded-full ax-border-2 ax-border-primary-500 ax-border-t-transparent ax-animate-spin ax-shrink-0"
3415
+ aria-hidden="true"
3416
+ ></span>
3417
+ } @else {
3418
+ <span
3419
+ class="ax-inline-block ax-w-2.5 ax-h-2.5 ax-rounded-full ax-bg-success-500 ax-shrink-0"
3420
+ aria-hidden="true"
3421
+ ></span>
3422
+ }
3423
+ <code class="axm-assist-renderer__agent-live-nested-name">{{ nt.name }}</code>
3424
+ <span class="axm-assist-renderer__agent-live-nested-status">{{
3425
+ nt.state === 'running' ? '…' : '✓'
3426
+ }}</span>
3427
+ </div>
3428
+ }
3429
+ </div>
3430
+ }
3431
+ @if (legacyAgentAns) {
3432
+ <div class="axm-assist-renderer__agent-live-nested-tools">
3433
+ <div class="axm-assist-renderer__tool-section-label">
3434
+ {{ '@conversation:chat.assist-renderer.sections.agent-answer' | translate | async }}
3435
+ </div>
3436
+ <div
3437
+ class="axm-assist-renderer__agent-live-stream"
3438
+ [attr.dir]="segmentDir(legacyAgentAns)"
3439
+ >
3440
+ {{ legacyAgentAns }}
3441
+ </div>
3442
+ </div>
3443
+ }
3444
+ </div>
3000
3445
  </div>
3001
- }
3446
+ </div>
3002
3447
  </div>
3003
3448
  } @else {
3449
+ @if (debugModeEnabled()) {
3004
3450
  <div class="axm-assist-renderer__accordion-group" axAccordionGroup [accordion]="false">
3005
- <div class="axm-assist-renderer__tool-card !ax-mb-0" axAccordionItem [isCollapsed]="true">
3451
+ <div
3452
+ class="axm-assist-renderer__tool-card !ax-mb-0"
3453
+ axAccordionItem
3454
+ #legacyStreamDbgAcc="axAccordionItem"
3455
+ [isCollapsed]="assistSectionIsCollapsed(assistLegacyToolAccordionKey(tc))"
3456
+ (onClick)="onAssistLegacyAccordionClick($event, tc)"
3457
+ >
3006
3458
  <div class="axm-assist-renderer__accordion-header" axAccordionItemHeader>
3007
3459
  <div class="axm-assist-renderer__accordion-header-main">
3008
3460
  <span class="axm-assist-renderer__accordion-header-title">
3461
+ <i
3462
+ class="fa-light fa-chevron-down axm-assist-renderer__thinking-chevron"
3463
+ [class.axm-assist-renderer__thinking-chevron--expanded]="!legacyStreamDbgAcc.isCollapsed()"
3464
+ aria-hidden="true"
3465
+ ></i>
3009
3466
  <i class="fa-light fa-screwdriver-wrench axm-assist-renderer__tool-title-icon"></i>
3010
3467
  {{ resolveToolDisplayTitle(tc.name) }}
3011
3468
  </span>
@@ -3061,13 +3518,29 @@ class AXMAssistMessageRendererComponent {
3061
3518
  </div>
3062
3519
  </div>
3063
3520
  </div>
3521
+ } @else {
3522
+ <div
3523
+ class="axm-assist-renderer__tool-compact ax-flex ax-items-center ax-gap-2 ax-rounded-md ax-border ax-border-default/50 ax-bg-default-50/40 ax-px-2 ax-py-1.5 ax-text-sm"
3524
+ role="status"
3525
+ >
3526
+ @if (tc.state === 'running') {
3527
+ <span
3528
+ class="ax-inline-block ax-w-2.5 ax-h-2.5 ax-rounded-full ax-border-2 ax-border-primary-500 ax-border-t-transparent ax-animate-spin ax-shrink-0"
3529
+ aria-hidden="true"
3530
+ ></span>
3531
+ } @else {
3532
+ <i class="fa-light fa-check ax-text-success-500 ax-shrink-0" aria-hidden="true"></i>
3533
+ }
3534
+ <span class="ax-font-medium ax-min-w-0 ax-truncate">{{ resolveToolDisplayTitle(tc.name) }}</span>
3535
+ </div>
3536
+ }
3064
3537
  }
3065
3538
  }
3066
3539
  </div>
3067
3540
  }
3068
- @if (streamText()) {
3541
+ @if (isStreaming() && streamText().trim()) {
3069
3542
  <span class="axm-assist-renderer__cursor"></span>
3070
- } @else if (!(debugModeEnabled() && toolCalls().length)) {
3543
+ } @else if (isStreaming() && !streamThink().trim() && !streamText().trim() && !toolCalls().length) {
3071
3544
  <div class="axm-assist-renderer__waiting">
3072
3545
  <span class="axm-assist-renderer__dot"></span>
3073
3546
  <span class="axm-assist-renderer__dot"></span>
@@ -3076,15 +3549,28 @@ class AXMAssistMessageRendererComponent {
3076
3549
  }
3077
3550
  </div>
3078
3551
  } @else {
3079
- @if (parsed().thinking) {
3552
+ @if (debugModeEnabled() && parsed().thinking) {
3080
3553
  <div class="axm-assist-renderer__accordion-group" axAccordionGroup [accordion]="false">
3081
- <div class="axm-assist-renderer__thinking-accordion !ax-mb-0" axAccordionItem [isCollapsed]="true">
3554
+ <div
3555
+ class="axm-assist-renderer__thinking-accordion !ax-mb-0"
3556
+ axAccordionItem
3557
+ #thinkAcc="axAccordionItem"
3558
+ [isCollapsed]="assistSectionIsCollapsed(assistThinkFinalKey())"
3559
+ (onClick)="onAssistAccordionClick($event, assistThinkFinalKey())"
3560
+ >
3082
3561
  <div
3083
3562
  class="axm-assist-renderer__accordion-header axm-assist-renderer__accordion-header--thinking"
3084
3563
  axAccordionItemHeader
3564
+ role="button"
3565
+ [attr.aria-expanded]="!thinkAcc.isCollapsed()"
3085
3566
  >
3086
3567
  <div class="axm-assist-renderer__accordion-header-main">
3087
3568
  <span class="axm-assist-renderer__accordion-header-title">
3569
+ <i
3570
+ class="fa-light fa-chevron-down axm-assist-renderer__thinking-chevron"
3571
+ [class.axm-assist-renderer__thinking-chevron--expanded]="!thinkAcc.isCollapsed()"
3572
+ aria-hidden="true"
3573
+ ></i>
3088
3574
  {{ '@conversation:chat.assist-renderer.sections.thinking' | translate | async }}
3089
3575
  </span>
3090
3576
  </div>
@@ -3109,10 +3595,21 @@ class AXMAssistMessageRendererComponent {
3109
3595
  <div class="axm-assist-renderer__tools">
3110
3596
  @for (tc of toolCalls(); track tc.id) {
3111
3597
  <div class="axm-assist-renderer__accordion-group" axAccordionGroup [accordion]="false">
3112
- <div class="axm-assist-renderer__tool-card !ax-mb-0" axAccordionItem [isCollapsed]="true">
3598
+ <div
3599
+ class="axm-assist-renderer__tool-card !ax-mb-0"
3600
+ axAccordionItem
3601
+ #legacyDoneDbgAcc="axAccordionItem"
3602
+ [isCollapsed]="assistSectionIsCollapsed(assistLegacyToolAccordionKey(tc))"
3603
+ (onClick)="onAssistLegacyAccordionClick($event, tc)"
3604
+ >
3113
3605
  <div class="axm-assist-renderer__accordion-header" axAccordionItemHeader>
3114
3606
  <div class="axm-assist-renderer__accordion-header-main">
3115
3607
  <span class="axm-assist-renderer__accordion-header-title">
3608
+ <i
3609
+ class="fa-light fa-chevron-down axm-assist-renderer__thinking-chevron"
3610
+ [class.axm-assist-renderer__thinking-chevron--expanded]="!legacyDoneDbgAcc.isCollapsed()"
3611
+ aria-hidden="true"
3612
+ ></i>
3116
3613
  <i class="fa-light fa-screwdriver-wrench axm-assist-renderer__tool-title-icon"></i>
3117
3614
  {{ resolveToolDisplayTitle(tc.name) }}
3118
3615
  </span>
@@ -3184,7 +3681,7 @@ class AXMAssistMessageRendererComponent {
3184
3681
  }
3185
3682
  }
3186
3683
  </div>
3187
- `, isInline: true, styles: [".axm-assist-renderer{display:flex;flex-direction:column;gap:.5rem}.axm-assist-bot{display:flex;flex-direction:column;gap:.75rem}.axm-assist-bot__segment{unicode-bidi:isolate;font-size:.95rem;line-height:1.8;letter-spacing:.002em;color:rgb(var(--ax-sys-color-on-surface));text-wrap:pretty}.axm-assist-bot__line--user{align-self:flex-end}.axm-assist-bot__line--tool-role{align-self:stretch}.axm-assist-bot__tool-result{border-radius:.5rem;border:1px solid var(--ax-color-border-default, rgba(0, 0, 0, .1));background:var(--ax-color-surface, rgba(0, 0, 0, .02));padding:.5rem .75rem}.axm-assist-bot__fallback{font-size:.88rem;line-height:1.75;white-space:pre-wrap;word-break:break-word;opacity:.9}.axm-assist-renderer__cursor{display:inline-block;inline-size:6px;block-size:1em;margin-inline-start:2px;background:var(--ax-color-primary-500);border-radius:1px;animation:axm-blink .8s steps(2) infinite;vertical-align:text-bottom}@keyframes axm-blink{0%{opacity:1}50%{opacity:0}}.axm-assist-renderer__stream-content{display:flex;flex-direction:column;gap:.5rem}.axm-assist-renderer__text{white-space:pre-line;word-break:break-word;line-height:1.85;font-size:.95rem;letter-spacing:.002em;text-wrap:pretty}.axm-assist-bot__segment ax-conversation-text-renderer{display:block}.axm-assist-bot__segment ax-conversation-text-renderer :is(p,ul,ol){margin-block:.45rem}.axm-assist-bot__segment ax-conversation-text-renderer li{line-height:1.8}.axm-assist-renderer__markdown :is(h1,h2,h3,h4,h5,h6){margin:.55rem 0 .35rem;line-height:1.35;font-weight:600}.axm-assist-renderer__markdown p{margin:.35rem 0}.axm-assist-renderer__markdown ul{margin:.4rem 0;padding-inline-start:1.1rem}.axm-assist-renderer__markdown blockquote{margin:.5rem 0;padding-inline:.65rem .5rem;border-inline-start:3px solid rgba(var(--ax-sys-color-primary),.35);background:rgba(var(--ax-sys-color-primary),.06);border-radius:.25rem}.axm-assist-renderer__markdown code{font-family:var(--ax-font-mono, monospace);font-size:.9em;padding:.1rem .3rem;border-radius:.25rem;background:var(--ax-color-ghost, rgba(0, 0, 0, .06))}.axm-assist-renderer__accordion-group{width:100%}.axm-assist-renderer__accordion-header{display:flex;align-items:center;justify-content:space-between;gap:.75rem;padding:.625rem .75rem;cursor:pointer;background-color:rgb(var(--ax-sys-color-lighter-surface));color:rgb(var(--ax-sys-color-on-lighter-surface));border-color:rgb(var(--ax-sys-color-border-lighter-surface))}.axm-assist-renderer__accordion-header-main{min-inline-size:0;display:flex;flex-direction:column;gap:.1rem}.axm-assist-renderer__accordion-header-title{font-size:.78rem;line-height:1.2;font-weight:600;color:var(--ax-color-text-primary, #111827);display:inline-flex;align-items:center;gap:.35rem}.axm-assist-renderer__accordion-header-badge{flex-shrink:0}.axm-assist-renderer__accordion-header-badge--primary{background:rgba(var(--ax-sys-color-primary),.12);border-color:rgba(var(--ax-sys-color-primary),.25);color:rgb(var(--ax-sys-color-primary))}.axm-assist-renderer__accordion-header-badge--success{background:#16a34a1f;border-color:#16a34a40;color:#15803d}.axm-assist-renderer__accordion-header-badge--danger{background:#dc26261f;border-color:#dc262640;color:#b91c1c}.axm-assist-renderer__accordion-header--thinking{background:linear-gradient(180deg,#f59e0b1f,#f59e0b0a),var(--ax-color-surface, #fff)}.axm-assist-renderer__thinking-body{padding:0 .75rem .625rem;font-size:.75rem;color:var(--ax-color-text-muted, #888);white-space:pre-wrap;word-break:break-word;line-height:1.5;border-block-start:1px solid var(--ax-color-border-default, rgba(0, 0, 0, .06));padding-block-start:.5rem}.axm-assist-renderer__tools{display:flex;flex-direction:column;gap:.375rem}.axm-assist-renderer__tool-card{border-radius:.5rem;border:1px solid var(--ax-color-border-default, rgba(0, 0, 0, .08));background:var(--ax-color-surface, rgba(255, 255, 255, .6));overflow:hidden}.axm-assist-renderer__tool-body{padding:.5rem .75rem .625rem;border-block-start:1px solid var(--ax-color-border-default, rgba(0, 0, 0, .06));display:flex;flex-direction:column;gap:.25rem}.axm-assist-renderer__tool-section-label{font-size:.625rem;font-weight:600;text-transform:uppercase;letter-spacing:.05em;color:var(--ax-color-text-muted, #888)}.axm-assist-renderer__tool-pre{margin:0;max-block-size:10rem;overflow:auto;border-radius:.375rem;background:var(--ax-color-ghost, rgba(0, 0, 0, .03));padding:.5rem;font-family:var(--ax-font-mono, monospace);font-size:.675rem;line-height:1.45;white-space:pre-wrap;word-break:break-word}.axm-assist-renderer__tool-editor-wrap{border-radius:.375rem;overflow:hidden}.axm-assist-renderer__waiting{display:flex;gap:.25rem;padding:.25rem 0}.axm-assist-renderer__dot{inline-size:6px;block-size:6px;border-radius:50%;background:var(--ax-color-text-muted, #999);animation:axm-blink 1.2s ease-in-out infinite}.axm-assist-renderer__dot:nth-child(2){animation-delay:.2s}.axm-assist-renderer__dot:nth-child(3){animation-delay:.4s}.axm-assist-renderer__agent-live-block{border-radius:.75rem;border:1px solid var(--ax-color-border-default, rgba(0, 0, 0, .1));background:var(--ax-color-surface, rgba(255, 255, 255, .72));padding:.75rem .875rem;display:flex;flex-direction:column;gap:.65rem;max-inline-size:min(42rem,100%)}.axm-assist-renderer__agent-live-header{display:flex;align-items:center;flex-wrap:wrap;gap:.5rem}.axm-assist-renderer__agent-live-title{font-size:.8125rem;font-weight:600;color:var(--ax-color-text-primary, #111827);flex:1;min-inline-size:0}.axm-assist-renderer__agent-live-prompt{font-size:.8125rem;line-height:1.55;white-space:pre-wrap;word-break:break-word;padding:.5rem .75rem;border-radius:1.25rem;background:var(--ax-color-ghost, rgba(0, 0, 0, .05));align-self:flex-end;max-inline-size:min(92%,36rem)}.axm-assist-renderer__agent-live-stream{font-size:.8125rem;line-height:1.55;white-space:pre-line;word-break:break-word;padding-block-start:.15rem}.axm-assist-renderer__agent-live-nested-tools{display:flex;flex-direction:column;gap:.35rem;padding-block-start:.15rem;border-block-start:1px solid var(--ax-color-border-default, rgba(0, 0, 0, .08))}.axm-assist-renderer__agent-live-nested-row{display:flex;align-items:center;gap:.45rem;font-size:.72rem}.axm-assist-renderer__agent-live-nested-name{font-family:var(--ax-font-mono, monospace);font-size:.7rem;flex:1;min-inline-size:0;overflow:hidden;text-overflow:ellipsis}.axm-assist-renderer__agent-live-nested-status{color:var(--ax-color-text-muted, #888);flex-shrink:0}\n"], dependencies: [{ kind: "component", type: AXTextRendererComponent, selector: "ax-conversation-text-renderer", inputs: ["message"] }, { kind: "component", type: AXPLayoutRendererComponent, selector: "axp-layout-renderer", inputs: ["layout", "context", "look", "mode"], outputs: ["contextChange", "contextInitiated", "validityChange"] }, { kind: "component", type: AXMAssistBotImageLineComponent, selector: "axm-assist-bot-image-line", inputs: ["parentMessage", "fileId", "mimeType", "name"] }, { kind: "ngmodule", type: AXAccordionCdkModule }, { kind: "directive", type: i1$2.AXAccordionGroupDirective, selector: "[axAccordionGroup]", inputs: ["accordion", "activeIndex", "collapsedOnItemClick"], exportAs: ["axAccordionGroup"] }, { kind: "directive", type: i1$2.AXAccordionItemContentDirective, selector: "[axAccordionItemContent]", inputs: ["transition"], exportAs: ["axAccordionItemContent"] }, { kind: "directive", type: i1$2.AXAccordionItemHeaderDirective, selector: "[axAccordionItemHeader]", exportAs: ["axAccordionItemHeader"] }, { kind: "directive", type: i1$2.AXAccordionItemDirective, selector: "[axAccordionItem]", inputs: ["isCollapsed"], outputs: ["isCollapsedChange", "onClick"], exportAs: ["axAccordionItem"] }, { kind: "ngmodule", type: AXBadgeModule }, { kind: "component", type: i2$1.AXBadgeComponent, selector: "ax-badge", inputs: ["color", "look", "text"] }, { kind: "ngmodule", type: AXCodeEditorModule }, { kind: "component", type: i3$2.AXCodeEditorComponent, selector: "ax-code-editor", inputs: ["disabled", "value", "state", "name", "id", "language", "readonly", "placeholder", "lineNumbers", "lineWrapping", "tabSize", "indentWithTab", "theme", "extensions", "ariaLabel", "focusOnReady", "formatOnSave", "minRow", "customCompletions"], outputs: ["onValueChanged", "valueChange", "stateChange", "readonlyChange", "disabledChange", "ready", "save"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "pipe", type: i3$1.AXTranslatorPipe, name: "translate" }, { kind: "pipe", type: AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
3684
+ `, isInline: true, styles: [".axm-assist-renderer{display:flex;flex-direction:column;gap:.5rem}.axm-assist-bot{display:flex;flex-direction:column;gap:.75rem}.axm-assist-bot__segment{unicode-bidi:isolate;font-size:.95rem;line-height:1.8;letter-spacing:.002em;color:rgb(var(--ax-sys-color-on-surface));text-wrap:pretty}.axm-assist-bot__line--user{align-self:flex-end}.axm-assist-bot__line--tool-role{align-self:stretch}.axm-assist-bot__tool-result{border-radius:.5rem;border:1px solid var(--ax-color-border-default, rgba(0, 0, 0, .1));background:var(--ax-color-surface, rgba(0, 0, 0, .02));padding:.5rem .75rem}.axm-assist-bot__fallback{font-size:.88rem;line-height:1.75;white-space:pre-wrap;word-break:break-word;opacity:.9}.axm-assist-renderer__cursor{display:inline-block;inline-size:6px;block-size:1em;margin-inline-start:2px;background:var(--ax-color-primary-500);border-radius:1px;animation:axm-blink .8s steps(2) infinite;vertical-align:text-bottom}@keyframes axm-blink{0%{opacity:1}50%{opacity:0}}.axm-assist-renderer__stream-content{display:flex;flex-direction:column;gap:.5rem}.axm-assist-renderer__streaming-activity{display:flex;align-items:center;gap:.5rem;padding-block:.15rem}.axm-assist-renderer__activity-label{line-height:1.45}.axm-assist-renderer__text{white-space:pre-line;word-break:break-word;line-height:1.85;font-size:.95rem;letter-spacing:.002em;text-wrap:pretty}.axm-assist-bot__segment ax-conversation-text-renderer{display:block}.axm-assist-bot__segment ax-conversation-text-renderer :is(p,ul,ol){margin-block:.45rem}.axm-assist-bot__segment ax-conversation-text-renderer li{line-height:1.8}.axm-assist-renderer__markdown :is(h1,h2,h3,h4,h5,h6){margin:.55rem 0 .35rem;line-height:1.35;font-weight:600}.axm-assist-renderer__markdown p{margin:.35rem 0}.axm-assist-renderer__markdown ul{margin:.4rem 0;padding-inline-start:1.1rem}.axm-assist-renderer__markdown blockquote{margin:.5rem 0;padding-inline:.65rem .5rem;border-inline-start:3px solid rgba(var(--ax-sys-color-primary),.35);background:rgba(var(--ax-sys-color-primary),.06);border-radius:.25rem}.axm-assist-renderer__markdown code{font-family:var(--ax-font-mono, monospace);font-size:.9em;padding:.1rem .3rem;border-radius:.25rem;background:var(--ax-color-ghost, rgba(0, 0, 0, .06))}.axm-assist-renderer__accordion-group{width:100%}.axm-assist-renderer__accordion-header{display:flex;align-items:center;justify-content:space-between;gap:.75rem;padding:.625rem .75rem;cursor:pointer;background-color:rgb(var(--ax-sys-color-lighter-surface));color:rgb(var(--ax-sys-color-on-lighter-surface));border-color:rgb(var(--ax-sys-color-border-lighter-surface))}.axm-assist-renderer__accordion-header-main{min-inline-size:0;display:flex;flex-direction:column;gap:.1rem}.axm-assist-renderer__accordion-header-title{font-size:.78rem;line-height:1.2;font-weight:600;color:var(--ax-color-text-primary, #111827);display:inline-flex;align-items:center;gap:.35rem}.axm-assist-renderer__accordion-header-badge{flex-shrink:0}.axm-assist-renderer__accordion-header-badge--primary{background:rgba(var(--ax-sys-color-primary),.12);border-color:rgba(var(--ax-sys-color-primary),.25);color:rgb(var(--ax-sys-color-primary))}.axm-assist-renderer__accordion-header-badge--success{background:#16a34a1f;border-color:#16a34a40;color:#15803d}.axm-assist-renderer__accordion-header-badge--danger{background:#dc26261f;border-color:#dc262640;color:#b91c1c}.axm-assist-renderer__accordion-header--thinking{background:linear-gradient(180deg,#f59e0b1f,#f59e0b0a),var(--ax-color-surface, #fff)}.axm-assist-renderer__thinking-chevron{display:inline-block;font-size:.65rem;opacity:.75;transition:transform .2s ease;line-height:1;flex-shrink:0}.axm-assist-renderer__thinking-chevron--expanded{transform:rotate(180deg)}.axm-assist-renderer__thinking-body{padding:0 .75rem .625rem;font-size:.75rem;color:var(--ax-color-text-muted, #888);white-space:pre-wrap;word-break:break-word;line-height:1.5;border-block-start:1px solid var(--ax-color-border-default, rgba(0, 0, 0, .06));padding-block-start:.5rem}.axm-assist-renderer__tools{display:flex;flex-direction:column;gap:.375rem}.axm-assist-renderer__tool-card{border-radius:.5rem;border:1px solid var(--ax-color-border-default, rgba(0, 0, 0, .08));background:var(--ax-color-surface, rgba(255, 255, 255, .6));overflow:hidden}.axm-assist-renderer__tool-body{padding:.5rem .75rem .625rem;border-block-start:1px solid var(--ax-color-border-default, rgba(0, 0, 0, .06));display:flex;flex-direction:column;gap:.25rem}.axm-assist-renderer__tool-section-label{font-size:.625rem;font-weight:600;text-transform:uppercase;letter-spacing:.05em;color:var(--ax-color-text-muted, #888)}.axm-assist-renderer__tool-pre{margin:0;max-block-size:10rem;overflow:auto;border-radius:.375rem;background:var(--ax-color-ghost, rgba(0, 0, 0, .03));padding:.5rem;font-family:var(--ax-font-mono, monospace);font-size:.675rem;line-height:1.45;white-space:pre-wrap;word-break:break-word}.axm-assist-renderer__tool-editor-wrap{border-radius:.375rem;overflow:hidden}.axm-assist-renderer__waiting{display:flex;gap:.25rem;padding:.25rem 0}.axm-assist-renderer__dot{inline-size:6px;block-size:6px;border-radius:50%;background:var(--ax-color-text-muted, #999);animation:axm-blink 1.2s ease-in-out infinite}.axm-assist-renderer__dot:nth-child(2){animation-delay:.2s}.axm-assist-renderer__dot:nth-child(3){animation-delay:.4s}.axm-assist-renderer__agent-live-block{border-radius:.75rem;border:1px solid var(--ax-color-border-default, rgba(0, 0, 0, .1));background:var(--ax-color-surface, rgba(255, 255, 255, .72));padding:.75rem .875rem;display:flex;flex-direction:column;gap:.65rem;max-inline-size:min(42rem,100%)}.axm-assist-renderer__agent-live-block--in-accordion{border:none;border-radius:0;background:transparent;padding:.5rem 0 0;max-inline-size:none}.axm-assist-renderer__agent-live-header{display:flex;align-items:center;flex-wrap:wrap;gap:.5rem}.axm-assist-renderer__agent-live-title{font-size:.8125rem;font-weight:600;color:var(--ax-color-text-primary, #111827);flex:1;min-inline-size:0}.axm-assist-renderer__agent-live-prompt{font-size:.8125rem;line-height:1.55;white-space:pre-wrap;word-break:break-word;padding:.5rem .75rem;border-radius:1.25rem;background:var(--ax-color-ghost, rgba(0, 0, 0, .05));align-self:flex-end;max-inline-size:min(92%,36rem)}.axm-assist-renderer__agent-live-stream{font-size:.8125rem;line-height:1.55;white-space:pre-line;word-break:break-word;padding-block-start:.15rem}.axm-assist-renderer__agent-live-nested-tools{display:flex;flex-direction:column;gap:.35rem;padding-block-start:.15rem;border-block-start:1px solid var(--ax-color-border-default, rgba(0, 0, 0, .08))}.axm-assist-renderer__agent-live-nested-row{display:flex;align-items:center;gap:.45rem;font-size:.72rem}.axm-assist-renderer__agent-live-nested-name{font-family:var(--ax-font-mono, monospace);font-size:.7rem;flex:1;min-inline-size:0;overflow:hidden;text-overflow:ellipsis}.axm-assist-renderer__agent-live-nested-status{color:var(--ax-color-text-muted, #888);flex-shrink:0}\n"], dependencies: [{ kind: "component", type: AXTextRendererComponent, selector: "ax-conversation-text-renderer", inputs: ["message"] }, { kind: "component", type: AXPLayoutRendererComponent, selector: "axp-layout-renderer", inputs: ["layout", "context", "look", "mode"], outputs: ["contextChange", "contextInitiated", "validityChange"] }, { kind: "component", type: AXMAssistBotImageLineComponent, selector: "axm-assist-bot-image-line", inputs: ["parentMessage", "fileId", "mimeType", "name"] }, { kind: "ngmodule", type: AXAccordionCdkModule }, { kind: "directive", type: i1$2.AXAccordionGroupDirective, selector: "[axAccordionGroup]", inputs: ["accordion", "activeIndex", "collapsedOnItemClick"], exportAs: ["axAccordionGroup"] }, { kind: "directive", type: i1$2.AXAccordionItemContentDirective, selector: "[axAccordionItemContent]", inputs: ["transition"], exportAs: ["axAccordionItemContent"] }, { kind: "directive", type: i1$2.AXAccordionItemHeaderDirective, selector: "[axAccordionItemHeader]", exportAs: ["axAccordionItemHeader"] }, { kind: "directive", type: i1$2.AXAccordionItemDirective, selector: "[axAccordionItem]", inputs: ["isCollapsed"], outputs: ["isCollapsedChange", "onClick"], exportAs: ["axAccordionItem"] }, { kind: "ngmodule", type: AXBadgeModule }, { kind: "component", type: i2$1.AXBadgeComponent, selector: "ax-badge", inputs: ["color", "look", "text"] }, { kind: "ngmodule", type: AXCodeEditorModule }, { kind: "component", type: i3$2.AXCodeEditorComponent, selector: "ax-code-editor", inputs: ["disabled", "value", "state", "name", "id", "language", "readonly", "placeholder", "lineNumbers", "lineWrapping", "tabSize", "indentWithTab", "theme", "extensions", "ariaLabel", "focusOnReady", "formatOnSave", "minRow", "customCompletions"], outputs: ["onValueChanged", "valueChange", "stateChange", "readonlyChange", "disabledChange", "ready", "save"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "pipe", type: i3$1.AXTranslatorPipe, name: "translate" }, { kind: "pipe", type: AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
3188
3685
  }
3189
3686
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXMAssistMessageRendererComponent, decorators: [{
3190
3687
  type: Component,
@@ -3224,21 +3721,71 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
3224
3721
  <div class="axm-assist-bot__segment" [attr.dir]="segmentDir(seg.content)">
3225
3722
  <ax-conversation-text-renderer [message]="syntheticTextMessage(lineIndex, segIndex, seg.content)" />
3226
3723
  </div>
3724
+ } @else if (line.role === 'assistant' && seg.type === 'think') {
3725
+ <div class="axm-assist-renderer__accordion-group" axAccordionGroup [accordion]="false">
3726
+ <div
3727
+ class="axm-assist-renderer__thinking-accordion !ax-mb-0"
3728
+ axAccordionItem
3729
+ #thinkAcc="axAccordionItem"
3730
+ [isCollapsed]="assistSectionIsCollapsed(assistThinkKey(lineIndex, segIndex))"
3731
+ (onClick)="onAssistAccordionClick($event, assistThinkKey(lineIndex, segIndex))"
3732
+ >
3733
+ <div
3734
+ class="axm-assist-renderer__accordion-header axm-assist-renderer__accordion-header--thinking"
3735
+ axAccordionItemHeader
3736
+ role="button"
3737
+ [attr.aria-expanded]="!thinkAcc.isCollapsed()"
3738
+ >
3739
+ <div class="axm-assist-renderer__accordion-header-main">
3740
+ <span class="axm-assist-renderer__accordion-header-title">
3741
+ <i
3742
+ class="fa-light fa-chevron-down axm-assist-renderer__thinking-chevron"
3743
+ [class.axm-assist-renderer__thinking-chevron--expanded]="!thinkAcc.isCollapsed()"
3744
+ aria-hidden="true"
3745
+ ></i>
3746
+ {{ '@conversation:chat.assist-renderer.sections.thinking' | translate | async }}
3747
+ </span>
3748
+ </div>
3749
+ <ax-badge
3750
+ [look]="'twotone'"
3751
+ [text]="('@conversation:chat.assist-renderer.badges.internal' | translate | async) ?? ''"
3752
+ [color]="'warning'"
3753
+ ></ax-badge>
3754
+ </div>
3755
+ <div axAccordionItemContent>
3756
+ <div
3757
+ class="axm-assist-renderer__thinking-body axm-assist-bot__segment"
3758
+ [attr.dir]="segmentDir(seg.content)"
3759
+ >
3760
+ {{ seg.content }}
3761
+ </div>
3762
+ </div>
3763
+ </div>
3764
+ </div>
3227
3765
  } @else if (line.role === 'assistant' && seg.type === 'text') {
3228
3766
  @let parsedLine = parseAssistLineText(seg.content);
3229
- @if (parsedLine.thinking) {
3767
+ @if (debugModeEnabled() && parsedLine.thinking) {
3230
3768
  <div class="axm-assist-renderer__accordion-group" axAccordionGroup [accordion]="false">
3231
3769
  <div
3232
3770
  class="axm-assist-renderer__thinking-accordion !ax-mb-0"
3233
3771
  axAccordionItem
3234
- [isCollapsed]="true"
3772
+ #thinkAcc="axAccordionItem"
3773
+ [isCollapsed]="assistSectionIsCollapsed(assistThinkKey(lineIndex, segIndex))"
3774
+ (onClick)="onAssistAccordionClick($event, assistThinkKey(lineIndex, segIndex))"
3235
3775
  >
3236
3776
  <div
3237
3777
  class="axm-assist-renderer__accordion-header axm-assist-renderer__accordion-header--thinking"
3238
3778
  axAccordionItemHeader
3779
+ role="button"
3780
+ [attr.aria-expanded]="!thinkAcc.isCollapsed()"
3239
3781
  >
3240
3782
  <div class="axm-assist-renderer__accordion-header-main">
3241
3783
  <span class="axm-assist-renderer__accordion-header-title">
3784
+ <i
3785
+ class="fa-light fa-chevron-down axm-assist-renderer__thinking-chevron"
3786
+ [class.axm-assist-renderer__thinking-chevron--expanded]="!thinkAcc.isCollapsed()"
3787
+ aria-hidden="true"
3788
+ ></i>
3242
3789
  {{ '@conversation:chat.assist-renderer.sections.thinking' | translate | async }}
3243
3790
  </span>
3244
3791
  </div>
@@ -3268,88 +3815,150 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
3268
3815
  }
3269
3816
  } @else if (
3270
3817
  line.role === 'assistant' &&
3271
- seg.type === 'agent' &&
3272
- debugModeEnabled() &&
3273
- isStreaming() &&
3274
- !toolResultForCallId(seg.callId)
3818
+ (seg.type === 'agent' || seg.type === 'tool') &&
3819
+ isDelegatedAgentCommand(seg.content.command) &&
3820
+ !debugModeEnabled()
3275
3821
  ) {
3276
3822
  @let agLive = toolCallEntryFor(seg.callId);
3277
- <div class="axm-assist-renderer__agent-live-block" role="region">
3278
- <div class="axm-assist-renderer__agent-live-header">
3279
- @if (agLive?.state === 'running') {
3280
- <span
3281
- class="axm-assist-renderer__agent-live-spin ax-inline-block ax-w-3 ax-h-3 ax-rounded-full ax-border-2 ax-border-primary-500 ax-border-t-transparent ax-animate-spin ax-shrink-0"
3282
- aria-hidden="true"
3283
- ></span>
3284
- } @else {
3285
- <span
3286
- class="ax-inline-block ax-w-3 ax-h-3 ax-rounded-full ax-bg-success-500 ax-shrink-0"
3287
- aria-hidden="true"
3288
- ></span>
3289
- }
3290
- <span class="axm-assist-renderer__agent-live-title">{{
3291
- resolveToolDisplayTitle(seg.content.command)
3292
- }}</span>
3293
- <ax-badge
3294
- [look]="'twotone'"
3295
- [text]="
3296
- (resolveToolBadge(
3297
- seg.content.command,
3298
- agLive?.state === 'running'
3299
- ? '@conversation:chat.assist-renderer.badges.running'
3300
- : '@conversation:chat.assist-renderer.badges.agent'
3301
- ) | translate | async) ?? ''
3302
- "
3303
- [color]="agLive?.state === 'running' ? 'primary' : 'success'"
3304
- ></ax-badge>
3305
- </div>
3823
+ @let res = toolResultForCallId(seg.callId);
3824
+ @let agentAnswerText = delegatedAgentAnswerForCall(res);
3825
+ <div class="axm-assist-renderer__accordion-group" axAccordionGroup [accordion]="false">
3306
3826
  <div
3307
- class="axm-assist-renderer__agent-live-prompt"
3308
- [attr.dir]="segmentDir(delegatedPromptPreview(seg.content.arguments))"
3827
+ class="axm-assist-renderer__tool-card axm-assist-renderer__agent-accordion !ax-mb-0"
3828
+ axAccordionItem
3829
+ #agentAcc="axAccordionItem"
3830
+ [isCollapsed]="assistSectionIsCollapsed(assistAgentKey(seg.callId))"
3831
+ (onClick)="onAssistAccordionClick($event, assistAgentKey(seg.callId))"
3309
3832
  >
3310
- {{ delegatedPromptPreview(seg.content.arguments) }}
3311
- </div>
3312
- @if (agLive?.nestedStreamText?.trim()) {
3313
3833
  <div
3314
- class="axm-assist-renderer__agent-live-stream"
3315
- [attr.dir]="segmentDir(agLive?.nestedStreamText ?? '')"
3834
+ class="axm-assist-renderer__accordion-header"
3835
+ axAccordionItemHeader
3836
+ role="button"
3837
+ [attr.aria-expanded]="!agentAcc.isCollapsed()"
3316
3838
  >
3317
- {{ agLive?.nestedStreamText }}
3318
- </div>
3319
- }
3320
- @if (agLive?.nestedTools?.length) {
3321
- <div class="axm-assist-renderer__agent-live-nested-tools">
3322
- @for (nt of agLive?.nestedTools ?? []; track nt.id) {
3323
- <div class="axm-assist-renderer__agent-live-nested-row">
3324
- @if (nt.state === 'running') {
3839
+ <div class="axm-assist-renderer__accordion-header-main">
3840
+ <span
3841
+ class="axm-assist-renderer__accordion-header-title ax-inline-flex ax-items-center ax-gap-2 ax-flex-wrap"
3842
+ >
3843
+ <i
3844
+ class="fa-light fa-chevron-down axm-assist-renderer__thinking-chevron"
3845
+ [class.axm-assist-renderer__thinking-chevron--expanded]="!agentAcc.isCollapsed()"
3846
+ aria-hidden="true"
3847
+ ></i>
3848
+ @if (agLive?.state === 'running') {
3325
3849
  <span
3326
- class="ax-inline-block ax-w-2.5 ax-h-2.5 ax-rounded-full ax-border-2 ax-border-primary-500 ax-border-t-transparent ax-animate-spin ax-shrink-0"
3850
+ class="axm-assist-renderer__agent-live-spin ax-inline-block ax-w-3 ax-h-3 ax-rounded-full ax-border-2 ax-border-primary-500 ax-border-t-transparent ax-animate-spin ax-shrink-0"
3327
3851
  aria-hidden="true"
3328
3852
  ></span>
3329
3853
  } @else {
3330
3854
  <span
3331
- class="ax-inline-block ax-w-2.5 ax-h-2.5 ax-rounded-full ax-bg-success-500 ax-shrink-0"
3855
+ class="ax-inline-block ax-w-3 ax-h-3 ax-rounded-full ax-bg-success-500 ax-shrink-0"
3332
3856
  aria-hidden="true"
3333
3857
  ></span>
3334
3858
  }
3335
- <code class="axm-assist-renderer__agent-live-nested-name">{{ nt.name }}</code>
3336
- <span class="axm-assist-renderer__agent-live-nested-status">{{
3337
- nt.state === 'running' ? '…' : '✓'
3859
+ <i class="fa-light fa-people-group ax-text-primary-500" aria-hidden="true"></i>
3860
+ <span class="axm-assist-renderer__agent-live-title">{{
3861
+ resolveToolDisplayTitle(seg.content.command)
3338
3862
  }}</span>
3863
+ </span>
3864
+ </div>
3865
+ <ax-badge
3866
+ [look]="'twotone'"
3867
+ [text]="
3868
+ (resolveToolBadge(
3869
+ seg.content.command,
3870
+ agLive?.state === 'running'
3871
+ ? '@conversation:chat.assist-renderer.badges.running'
3872
+ : '@conversation:chat.assist-renderer.badges.agent'
3873
+ ) | translate | async) ?? ''
3874
+ "
3875
+ [color]="agLive?.state === 'running' ? 'primary' : 'success'"
3876
+ ></ax-badge>
3877
+ </div>
3878
+ <div axAccordionItemContent>
3879
+ <div
3880
+ class="axm-assist-renderer__agent-live-block axm-assist-renderer__agent-live-block--in-accordion"
3881
+ role="region"
3882
+ >
3883
+ <div
3884
+ class="axm-assist-renderer__agent-live-prompt"
3885
+ [attr.dir]="segmentDir(delegatedPromptPreview(seg.content.arguments))"
3886
+ >
3887
+ {{ delegatedPromptPreview(seg.content.arguments) }}
3339
3888
  </div>
3340
- }
3889
+ @if (agLive?.nestedStreamText?.trim()) {
3890
+ <div
3891
+ class="axm-assist-renderer__agent-live-stream"
3892
+ [attr.dir]="segmentDir(agLive?.nestedStreamText ?? '')"
3893
+ >
3894
+ {{ agLive?.nestedStreamText }}
3895
+ </div>
3896
+ }
3897
+ @if (agLive?.nestedTools?.length) {
3898
+ <div class="axm-assist-renderer__agent-live-nested-tools">
3899
+ @for (nt of agLive?.nestedTools ?? []; track nt.id) {
3900
+ <div class="axm-assist-renderer__agent-live-nested-row">
3901
+ @if (nt.state === 'running') {
3902
+ <span
3903
+ class="ax-inline-block ax-w-2.5 ax-h-2.5 ax-rounded-full ax-border-2 ax-border-primary-500 ax-border-t-transparent ax-animate-spin ax-shrink-0"
3904
+ aria-hidden="true"
3905
+ ></span>
3906
+ } @else {
3907
+ <span
3908
+ class="ax-inline-block ax-w-2.5 ax-h-2.5 ax-rounded-full ax-bg-success-500 ax-shrink-0"
3909
+ aria-hidden="true"
3910
+ ></span>
3911
+ }
3912
+ <code class="axm-assist-renderer__agent-live-nested-name">{{ nt.name }}</code>
3913
+ <span class="axm-assist-renderer__agent-live-nested-status">{{
3914
+ nt.state === 'running' ? '…' : '✓'
3915
+ }}</span>
3916
+ </div>
3917
+ }
3918
+ </div>
3919
+ }
3920
+ @if (agentAnswerText) {
3921
+ <div class="axm-assist-renderer__agent-live-nested-tools">
3922
+ <div class="axm-assist-renderer__tool-section-label">
3923
+ {{ '@conversation:chat.assist-renderer.sections.agent-answer' | translate | async }}
3924
+ </div>
3925
+ <div
3926
+ class="axm-assist-renderer__agent-live-stream"
3927
+ [attr.dir]="segmentDir(agentAnswerText)"
3928
+ >
3929
+ {{ agentAnswerText }}
3930
+ </div>
3931
+ </div>
3932
+ }
3933
+ </div>
3341
3934
  </div>
3342
- }
3935
+ </div>
3343
3936
  </div>
3344
- } @else if (line.role === 'assistant' && seg.type === 'agent' && debugModeEnabled()) {
3937
+ } @else if (
3938
+ line.role === 'assistant' &&
3939
+ (seg.type === 'agent' || seg.type === 'tool') &&
3940
+ isDelegatedAgentCommand(seg.content.command) &&
3941
+ debugModeEnabled()
3942
+ ) {
3345
3943
  <div class="axm-assist-renderer__accordion-group" axAccordionGroup [accordion]="false">
3346
- <div class="axm-assist-renderer__tool-card !ax-mb-0" axAccordionItem [isCollapsed]="true">
3944
+ <div
3945
+ class="axm-assist-renderer__tool-card !ax-mb-0"
3946
+ axAccordionItem
3947
+ #agentDebugAcc="axAccordionItem"
3948
+ [isCollapsed]="assistSectionIsCollapsed(assistAgentKey(seg.callId))"
3949
+ (onClick)="onAssistAccordionClick($event, assistAgentKey(seg.callId))"
3950
+ >
3347
3951
  <div class="axm-assist-renderer__accordion-header" axAccordionItemHeader>
3348
3952
  <div class="axm-assist-renderer__accordion-header-main">
3349
3953
  <span class="axm-assist-renderer__accordion-header-title">
3954
+ <i
3955
+ class="fa-light fa-chevron-down axm-assist-renderer__thinking-chevron"
3956
+ [class.axm-assist-renderer__thinking-chevron--expanded]="!agentDebugAcc.isCollapsed()"
3957
+ aria-hidden="true"
3958
+ ></i>
3350
3959
  <i class="fa-light fa-screwdriver-wrench axm-assist-renderer__tool-title-icon"></i>
3351
3960
  {{ resolveToolDisplayTitle(seg.content.command) }}
3352
- </span>
3961
+ </span>d
3353
3962
  </div>
3354
3963
  <span
3355
3964
  class="axm-assist-renderer__accordion-header-badge axm-assist-renderer__accordion-header-badge--primary"
@@ -3397,12 +4006,42 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
3397
4006
  </div>
3398
4007
  </div>
3399
4008
  </div>
4009
+ } @else if (line.role === 'assistant' && seg.type === 'tool' && !debugModeEnabled()) {
4010
+ @let tc = toolCallEntryFor(seg.callId);
4011
+ <div
4012
+ class="axm-assist-renderer__tool-compact ax-flex ax-items-center ax-gap-2 ax-rounded-md ax-border ax-border-default/50 ax-bg-default-50/40 ax-px-2 ax-py-1.5 ax-text-sm"
4013
+ role="status"
4014
+ [attr.aria-label]="resolveToolDisplayTitle(seg.content.command)"
4015
+ >
4016
+ @if (tc?.state === 'running') {
4017
+ <span
4018
+ class="ax-inline-block ax-w-2.5 ax-h-2.5 ax-rounded-full ax-border-2 ax-border-primary-500 ax-border-t-transparent ax-animate-spin ax-shrink-0"
4019
+ aria-hidden="true"
4020
+ ></span>
4021
+ } @else {
4022
+ <i class="fa-light fa-check ax-text-success-500 ax-shrink-0" aria-hidden="true"></i>
4023
+ }
4024
+ <span class="ax-font-medium ax-min-w-0 ax-truncate">{{
4025
+ resolveToolDisplayTitle(seg.content.command)
4026
+ }}</span>
4027
+ </div>
3400
4028
  } @else if (line.role === 'assistant' && seg.type === 'tool' && debugModeEnabled()) {
3401
4029
  <div class="axm-assist-renderer__accordion-group" axAccordionGroup [accordion]="false">
3402
- <div class="axm-assist-renderer__tool-card !ax-mb-0" axAccordionItem [isCollapsed]="true">
4030
+ <div
4031
+ class="axm-assist-renderer__tool-card !ax-mb-0"
4032
+ axAccordionItem
4033
+ #toolDebugAcc="axAccordionItem"
4034
+ [isCollapsed]="assistSectionIsCollapsed(assistToolKey(seg.callId))"
4035
+ (onClick)="onAssistAccordionClick($event, assistToolKey(seg.callId))"
4036
+ >
3403
4037
  <div class="axm-assist-renderer__accordion-header" axAccordionItemHeader>
3404
4038
  <div class="axm-assist-renderer__accordion-header-main">
3405
4039
  <span class="axm-assist-renderer__accordion-header-title">
4040
+ <i
4041
+ class="fa-light fa-chevron-down axm-assist-renderer__thinking-chevron"
4042
+ [class.axm-assist-renderer__thinking-chevron--expanded]="!toolDebugAcc.isCollapsed()"
4043
+ aria-hidden="true"
4044
+ ></i>
3406
4045
  <i class="fa-light fa-screwdriver-wrench axm-assist-renderer__tool-title-icon"></i>
3407
4046
  {{ resolveToolDisplayTitle(seg.content.command) }}
3408
4047
  </span>
@@ -3468,8 +4107,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
3468
4107
  />
3469
4108
  } @else if (line.role === 'tool' && (seg.type === 'tool_result' || seg.type === 'agent_result')) {
3470
4109
  <!-- merged into the corresponding tool/agent accordion -->
3471
- } @else if (line.role === 'assistant' && (seg.type === 'tool' || seg.type === 'agent')) {
3472
- <!-- hidden when debug mode is disabled -->
3473
4110
  } @else if (line.role === 'system' && seg.type === 'text') {
3474
4111
  <div class="axm-assist-bot__segment" [attr.dir]="segmentDir(seg.content)">
3475
4112
  <ax-conversation-text-renderer [message]="syntheticTextMessage(lineIndex, segIndex, seg.content)" />
@@ -3486,94 +4123,214 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
3486
4123
  </div>
3487
4124
  }
3488
4125
  @if (isStreaming()) {
4126
+ <div class="axm-assist-renderer__streaming-activity" role="status" aria-live="polite">
4127
+ <span
4128
+ class="axm-assist-renderer__activity-spin ax-inline-block ax-w-3 ax-h-3 ax-rounded-full ax-border-2 ax-border-primary-500 ax-border-t-transparent ax-animate-spin ax-shrink-0"
4129
+ aria-hidden="true"
4130
+ ></span>
4131
+ <span class="axm-assist-renderer__activity-label ax-text-xs ax-text-muted ax-italic">{{
4132
+ assistActivityMessageKey() | translate | async
4133
+ }}</span>
4134
+ </div>
4135
+ }
4136
+ @if (isStreaming() && streamText().trim()) {
3489
4137
  <span class="axm-assist-renderer__cursor" aria-hidden="true"></span>
3490
4138
  }
3491
4139
  </div>
3492
4140
  } @else {
3493
4141
  @if (isStreaming()) {
3494
4142
  <div class="axm-assist-renderer__stream-content">
4143
+ <div class="axm-assist-renderer__streaming-activity" role="status" aria-live="polite">
4144
+ <span
4145
+ class="axm-assist-renderer__activity-spin ax-inline-block ax-w-3 ax-h-3 ax-rounded-full ax-border-2 ax-border-primary-500 ax-border-t-transparent ax-animate-spin ax-shrink-0"
4146
+ aria-hidden="true"
4147
+ ></span>
4148
+ <span class="axm-assist-renderer__activity-label ax-text-xs ax-text-muted ax-italic">{{
4149
+ assistActivityMessageKey() | translate | async
4150
+ }}</span>
4151
+ </div>
4152
+ @if (streamThink().trim()) {
4153
+ <div class="axm-assist-renderer__accordion-group" axAccordionGroup [accordion]="false">
4154
+ <div
4155
+ class="axm-assist-renderer__thinking-accordion !ax-mb-0"
4156
+ axAccordionItem
4157
+ #thinkAcc="axAccordionItem"
4158
+ [isCollapsed]="assistSectionIsCollapsed(assistThinkStreamKey())"
4159
+ (onClick)="onAssistAccordionClick($event, assistThinkStreamKey())"
4160
+ >
4161
+ <div
4162
+ class="axm-assist-renderer__accordion-header axm-assist-renderer__accordion-header--thinking"
4163
+ axAccordionItemHeader
4164
+ role="button"
4165
+ [attr.aria-expanded]="!thinkAcc.isCollapsed()"
4166
+ >
4167
+ <div class="axm-assist-renderer__accordion-header-main">
4168
+ <span class="axm-assist-renderer__accordion-header-title">
4169
+ <i
4170
+ class="fa-light fa-chevron-down axm-assist-renderer__thinking-chevron"
4171
+ [class.axm-assist-renderer__thinking-chevron--expanded]="!thinkAcc.isCollapsed()"
4172
+ aria-hidden="true"
4173
+ ></i>
4174
+ {{ '@conversation:chat.assist-renderer.sections.thinking' | translate | async }}
4175
+ </span>
4176
+ </div>
4177
+ <ax-badge
4178
+ [look]="'twotone'"
4179
+ [text]="('@conversation:chat.assist-renderer.badges.internal' | translate | async) ?? ''"
4180
+ [color]="'warning'"
4181
+ ></ax-badge>
4182
+ </div>
4183
+ <div axAccordionItemContent>
4184
+ <div
4185
+ class="axm-assist-renderer__thinking-body axm-assist-bot__segment"
4186
+ [attr.dir]="segmentDir(streamThink())"
4187
+ >
4188
+ {{ streamThink() }}
4189
+ </div>
4190
+ </div>
4191
+ </div>
4192
+ </div>
4193
+ }
3495
4194
  @if (streamText()) {
3496
4195
  <div class="axm-assist-renderer__text axm-assist-bot__segment" [attr.dir]="segmentDir(streamText())">
3497
4196
  {{ streamText() }}
3498
4197
  </div>
3499
4198
  }
3500
- @if (debugModeEnabled() && toolCalls().length) {
4199
+ @if (toolCalls().length) {
3501
4200
  <div class="axm-assist-renderer__tools">
3502
4201
  @for (tc of toolCalls(); track tc.id) {
3503
- @if (isDelegatedAgentCommand(tc.name) && (tc.state === 'running' || !tc.output?.trim())) {
3504
- <div class="axm-assist-renderer__agent-live-block" role="region">
3505
- <div class="axm-assist-renderer__agent-live-header">
3506
- @if (tc.state === 'running') {
3507
- <span
3508
- class="axm-assist-renderer__agent-live-spin ax-inline-block ax-w-3 ax-h-3 ax-rounded-full ax-border-2 ax-border-primary-500 ax-border-t-transparent ax-animate-spin ax-shrink-0"
3509
- aria-hidden="true"
3510
- ></span>
3511
- } @else {
3512
- <span
3513
- class="ax-inline-block ax-w-3 ax-h-3 ax-rounded-full ax-bg-success-500 ax-shrink-0"
3514
- aria-hidden="true"
3515
- ></span>
3516
- }
3517
- <span class="axm-assist-renderer__agent-live-title">{{
3518
- resolveToolDisplayTitle(tc.name)
3519
- }}</span>
3520
- <ax-badge
3521
- [look]="'twotone'"
3522
- [text]="
3523
- (resolveToolBadge(
3524
- tc.name,
3525
- tc.state === 'running'
3526
- ? '@conversation:chat.assist-renderer.badges.running'
3527
- : '@conversation:chat.assist-renderer.badges.agent'
3528
- ) | translate | async) ?? ''
3529
- "
3530
- [color]="tc.state === 'running' ? 'primary' : 'success'"
3531
- ></ax-badge>
3532
- </div>
4202
+ @if (isDelegatedAgentCommand(tc.name)) {
4203
+ @let legacyAgentAns = delegatedAnswerFromToolOutputString(tc.output);
4204
+ <div class="axm-assist-renderer__accordion-group" axAccordionGroup [accordion]="false">
3533
4205
  <div
3534
- class="axm-assist-renderer__agent-live-prompt"
3535
- [attr.dir]="segmentDir(delegatedPromptPreview(tc.arguments))"
4206
+ class="axm-assist-renderer__tool-card axm-assist-renderer__agent-accordion !ax-mb-0"
4207
+ axAccordionItem
4208
+ #legacyAgentAcc="axAccordionItem"
4209
+ [isCollapsed]="assistSectionIsCollapsed(assistAgentKey(tc.id))"
4210
+ (onClick)="onAssistAccordionClick($event, assistAgentKey(tc.id))"
3536
4211
  >
3537
- {{ delegatedPromptPreview(tc.arguments) }}
3538
- </div>
3539
- @if (tc.nestedStreamText?.trim()) {
3540
4212
  <div
3541
- class="axm-assist-renderer__agent-live-stream"
3542
- [attr.dir]="segmentDir(tc.nestedStreamText ?? '')"
4213
+ class="axm-assist-renderer__accordion-header"
4214
+ axAccordionItemHeader
4215
+ role="button"
4216
+ [attr.aria-expanded]="!legacyAgentAcc.isCollapsed()"
3543
4217
  >
3544
- {{ tc.nestedStreamText }}
3545
- </div>
3546
- }
3547
- @if (tc.nestedTools?.length) {
3548
- <div class="axm-assist-renderer__agent-live-nested-tools">
3549
- @for (nt of tc.nestedTools; track nt.id) {
3550
- <div class="axm-assist-renderer__agent-live-nested-row">
3551
- @if (nt.state === 'running') {
4218
+ <div class="axm-assist-renderer__accordion-header-main">
4219
+ <span
4220
+ class="axm-assist-renderer__accordion-header-title ax-inline-flex ax-items-center ax-gap-2 ax-flex-wrap"
4221
+ >
4222
+ <i
4223
+ class="fa-light fa-chevron-down axm-assist-renderer__thinking-chevron"
4224
+ [class.axm-assist-renderer__thinking-chevron--expanded]="!legacyAgentAcc.isCollapsed()"
4225
+ aria-hidden="true"
4226
+ ></i>
4227
+ @if (tc.state === 'running') {
3552
4228
  <span
3553
- class="ax-inline-block ax-w-2.5 ax-h-2.5 ax-rounded-full ax-border-2 ax-border-primary-500 ax-border-t-transparent ax-animate-spin ax-shrink-0"
4229
+ class="axm-assist-renderer__agent-live-spin ax-inline-block ax-w-3 ax-h-3 ax-rounded-full ax-border-2 ax-border-primary-500 ax-border-t-transparent ax-animate-spin ax-shrink-0"
3554
4230
  aria-hidden="true"
3555
4231
  ></span>
3556
4232
  } @else {
3557
4233
  <span
3558
- class="ax-inline-block ax-w-2.5 ax-h-2.5 ax-rounded-full ax-bg-success-500 ax-shrink-0"
4234
+ class="ax-inline-block ax-w-3 ax-h-3 ax-rounded-full ax-bg-success-500 ax-shrink-0"
3559
4235
  aria-hidden="true"
3560
4236
  ></span>
3561
4237
  }
3562
- <code class="axm-assist-renderer__agent-live-nested-name">{{ nt.name }}</code>
3563
- <span class="axm-assist-renderer__agent-live-nested-status">{{
3564
- nt.state === 'running' ? '…' : '✓'
4238
+ <i class="fa-light fa-people-group ax-text-primary-500" aria-hidden="true"></i>
4239
+ <span class="axm-assist-renderer__agent-live-title">{{
4240
+ resolveToolDisplayTitle(tc.name)
3565
4241
  }}</span>
4242
+ </span>
4243
+ </div>
4244
+ <ax-badge
4245
+ [look]="'twotone'"
4246
+ [text]="
4247
+ (resolveToolBadge(
4248
+ tc.name,
4249
+ tc.state === 'running'
4250
+ ? '@conversation:chat.assist-renderer.badges.running'
4251
+ : '@conversation:chat.assist-renderer.badges.agent'
4252
+ ) | translate | async) ?? ''
4253
+ "
4254
+ [color]="tc.state === 'running' ? 'primary' : 'success'"
4255
+ ></ax-badge>
4256
+ </div>
4257
+ <div axAccordionItemContent>
4258
+ <div
4259
+ class="axm-assist-renderer__agent-live-block axm-assist-renderer__agent-live-block--in-accordion"
4260
+ role="region"
4261
+ >
4262
+ <div
4263
+ class="axm-assist-renderer__agent-live-prompt"
4264
+ [attr.dir]="segmentDir(delegatedPromptPreview(tc.arguments))"
4265
+ >
4266
+ {{ delegatedPromptPreview(tc.arguments) }}
3566
4267
  </div>
3567
- }
4268
+ @if (tc.nestedStreamText?.trim()) {
4269
+ <div
4270
+ class="axm-assist-renderer__agent-live-stream"
4271
+ [attr.dir]="segmentDir(tc.nestedStreamText ?? '')"
4272
+ >
4273
+ {{ tc.nestedStreamText }}
4274
+ </div>
4275
+ }
4276
+ @if (tc.nestedTools?.length) {
4277
+ <div class="axm-assist-renderer__agent-live-nested-tools">
4278
+ @for (nt of tc.nestedTools; track nt.id) {
4279
+ <div class="axm-assist-renderer__agent-live-nested-row">
4280
+ @if (nt.state === 'running') {
4281
+ <span
4282
+ class="ax-inline-block ax-w-2.5 ax-h-2.5 ax-rounded-full ax-border-2 ax-border-primary-500 ax-border-t-transparent ax-animate-spin ax-shrink-0"
4283
+ aria-hidden="true"
4284
+ ></span>
4285
+ } @else {
4286
+ <span
4287
+ class="ax-inline-block ax-w-2.5 ax-h-2.5 ax-rounded-full ax-bg-success-500 ax-shrink-0"
4288
+ aria-hidden="true"
4289
+ ></span>
4290
+ }
4291
+ <code class="axm-assist-renderer__agent-live-nested-name">{{ nt.name }}</code>
4292
+ <span class="axm-assist-renderer__agent-live-nested-status">{{
4293
+ nt.state === 'running' ? '…' : '✓'
4294
+ }}</span>
4295
+ </div>
4296
+ }
4297
+ </div>
4298
+ }
4299
+ @if (legacyAgentAns) {
4300
+ <div class="axm-assist-renderer__agent-live-nested-tools">
4301
+ <div class="axm-assist-renderer__tool-section-label">
4302
+ {{ '@conversation:chat.assist-renderer.sections.agent-answer' | translate | async }}
4303
+ </div>
4304
+ <div
4305
+ class="axm-assist-renderer__agent-live-stream"
4306
+ [attr.dir]="segmentDir(legacyAgentAns)"
4307
+ >
4308
+ {{ legacyAgentAns }}
4309
+ </div>
4310
+ </div>
4311
+ }
4312
+ </div>
3568
4313
  </div>
3569
- }
4314
+ </div>
3570
4315
  </div>
3571
4316
  } @else {
4317
+ @if (debugModeEnabled()) {
3572
4318
  <div class="axm-assist-renderer__accordion-group" axAccordionGroup [accordion]="false">
3573
- <div class="axm-assist-renderer__tool-card !ax-mb-0" axAccordionItem [isCollapsed]="true">
4319
+ <div
4320
+ class="axm-assist-renderer__tool-card !ax-mb-0"
4321
+ axAccordionItem
4322
+ #legacyStreamDbgAcc="axAccordionItem"
4323
+ [isCollapsed]="assistSectionIsCollapsed(assistLegacyToolAccordionKey(tc))"
4324
+ (onClick)="onAssistLegacyAccordionClick($event, tc)"
4325
+ >
3574
4326
  <div class="axm-assist-renderer__accordion-header" axAccordionItemHeader>
3575
4327
  <div class="axm-assist-renderer__accordion-header-main">
3576
4328
  <span class="axm-assist-renderer__accordion-header-title">
4329
+ <i
4330
+ class="fa-light fa-chevron-down axm-assist-renderer__thinking-chevron"
4331
+ [class.axm-assist-renderer__thinking-chevron--expanded]="!legacyStreamDbgAcc.isCollapsed()"
4332
+ aria-hidden="true"
4333
+ ></i>
3577
4334
  <i class="fa-light fa-screwdriver-wrench axm-assist-renderer__tool-title-icon"></i>
3578
4335
  {{ resolveToolDisplayTitle(tc.name) }}
3579
4336
  </span>
@@ -3629,13 +4386,29 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
3629
4386
  </div>
3630
4387
  </div>
3631
4388
  </div>
4389
+ } @else {
4390
+ <div
4391
+ class="axm-assist-renderer__tool-compact ax-flex ax-items-center ax-gap-2 ax-rounded-md ax-border ax-border-default/50 ax-bg-default-50/40 ax-px-2 ax-py-1.5 ax-text-sm"
4392
+ role="status"
4393
+ >
4394
+ @if (tc.state === 'running') {
4395
+ <span
4396
+ class="ax-inline-block ax-w-2.5 ax-h-2.5 ax-rounded-full ax-border-2 ax-border-primary-500 ax-border-t-transparent ax-animate-spin ax-shrink-0"
4397
+ aria-hidden="true"
4398
+ ></span>
4399
+ } @else {
4400
+ <i class="fa-light fa-check ax-text-success-500 ax-shrink-0" aria-hidden="true"></i>
4401
+ }
4402
+ <span class="ax-font-medium ax-min-w-0 ax-truncate">{{ resolveToolDisplayTitle(tc.name) }}</span>
4403
+ </div>
4404
+ }
3632
4405
  }
3633
4406
  }
3634
4407
  </div>
3635
4408
  }
3636
- @if (streamText()) {
4409
+ @if (isStreaming() && streamText().trim()) {
3637
4410
  <span class="axm-assist-renderer__cursor"></span>
3638
- } @else if (!(debugModeEnabled() && toolCalls().length)) {
4411
+ } @else if (isStreaming() && !streamThink().trim() && !streamText().trim() && !toolCalls().length) {
3639
4412
  <div class="axm-assist-renderer__waiting">
3640
4413
  <span class="axm-assist-renderer__dot"></span>
3641
4414
  <span class="axm-assist-renderer__dot"></span>
@@ -3644,15 +4417,28 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
3644
4417
  }
3645
4418
  </div>
3646
4419
  } @else {
3647
- @if (parsed().thinking) {
4420
+ @if (debugModeEnabled() && parsed().thinking) {
3648
4421
  <div class="axm-assist-renderer__accordion-group" axAccordionGroup [accordion]="false">
3649
- <div class="axm-assist-renderer__thinking-accordion !ax-mb-0" axAccordionItem [isCollapsed]="true">
4422
+ <div
4423
+ class="axm-assist-renderer__thinking-accordion !ax-mb-0"
4424
+ axAccordionItem
4425
+ #thinkAcc="axAccordionItem"
4426
+ [isCollapsed]="assistSectionIsCollapsed(assistThinkFinalKey())"
4427
+ (onClick)="onAssistAccordionClick($event, assistThinkFinalKey())"
4428
+ >
3650
4429
  <div
3651
4430
  class="axm-assist-renderer__accordion-header axm-assist-renderer__accordion-header--thinking"
3652
4431
  axAccordionItemHeader
4432
+ role="button"
4433
+ [attr.aria-expanded]="!thinkAcc.isCollapsed()"
3653
4434
  >
3654
4435
  <div class="axm-assist-renderer__accordion-header-main">
3655
4436
  <span class="axm-assist-renderer__accordion-header-title">
4437
+ <i
4438
+ class="fa-light fa-chevron-down axm-assist-renderer__thinking-chevron"
4439
+ [class.axm-assist-renderer__thinking-chevron--expanded]="!thinkAcc.isCollapsed()"
4440
+ aria-hidden="true"
4441
+ ></i>
3656
4442
  {{ '@conversation:chat.assist-renderer.sections.thinking' | translate | async }}
3657
4443
  </span>
3658
4444
  </div>
@@ -3677,10 +4463,21 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
3677
4463
  <div class="axm-assist-renderer__tools">
3678
4464
  @for (tc of toolCalls(); track tc.id) {
3679
4465
  <div class="axm-assist-renderer__accordion-group" axAccordionGroup [accordion]="false">
3680
- <div class="axm-assist-renderer__tool-card !ax-mb-0" axAccordionItem [isCollapsed]="true">
4466
+ <div
4467
+ class="axm-assist-renderer__tool-card !ax-mb-0"
4468
+ axAccordionItem
4469
+ #legacyDoneDbgAcc="axAccordionItem"
4470
+ [isCollapsed]="assistSectionIsCollapsed(assistLegacyToolAccordionKey(tc))"
4471
+ (onClick)="onAssistLegacyAccordionClick($event, tc)"
4472
+ >
3681
4473
  <div class="axm-assist-renderer__accordion-header" axAccordionItemHeader>
3682
4474
  <div class="axm-assist-renderer__accordion-header-main">
3683
4475
  <span class="axm-assist-renderer__accordion-header-title">
4476
+ <i
4477
+ class="fa-light fa-chevron-down axm-assist-renderer__thinking-chevron"
4478
+ [class.axm-assist-renderer__thinking-chevron--expanded]="!legacyDoneDbgAcc.isCollapsed()"
4479
+ aria-hidden="true"
4480
+ ></i>
3684
4481
  <i class="fa-light fa-screwdriver-wrench axm-assist-renderer__tool-title-icon"></i>
3685
4482
  {{ resolveToolDisplayTitle(tc.name) }}
3686
4483
  </span>
@@ -3752,7 +4549,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
3752
4549
  }
3753
4550
  }
3754
4551
  </div>
3755
- `, styles: [".axm-assist-renderer{display:flex;flex-direction:column;gap:.5rem}.axm-assist-bot{display:flex;flex-direction:column;gap:.75rem}.axm-assist-bot__segment{unicode-bidi:isolate;font-size:.95rem;line-height:1.8;letter-spacing:.002em;color:rgb(var(--ax-sys-color-on-surface));text-wrap:pretty}.axm-assist-bot__line--user{align-self:flex-end}.axm-assist-bot__line--tool-role{align-self:stretch}.axm-assist-bot__tool-result{border-radius:.5rem;border:1px solid var(--ax-color-border-default, rgba(0, 0, 0, .1));background:var(--ax-color-surface, rgba(0, 0, 0, .02));padding:.5rem .75rem}.axm-assist-bot__fallback{font-size:.88rem;line-height:1.75;white-space:pre-wrap;word-break:break-word;opacity:.9}.axm-assist-renderer__cursor{display:inline-block;inline-size:6px;block-size:1em;margin-inline-start:2px;background:var(--ax-color-primary-500);border-radius:1px;animation:axm-blink .8s steps(2) infinite;vertical-align:text-bottom}@keyframes axm-blink{0%{opacity:1}50%{opacity:0}}.axm-assist-renderer__stream-content{display:flex;flex-direction:column;gap:.5rem}.axm-assist-renderer__text{white-space:pre-line;word-break:break-word;line-height:1.85;font-size:.95rem;letter-spacing:.002em;text-wrap:pretty}.axm-assist-bot__segment ax-conversation-text-renderer{display:block}.axm-assist-bot__segment ax-conversation-text-renderer :is(p,ul,ol){margin-block:.45rem}.axm-assist-bot__segment ax-conversation-text-renderer li{line-height:1.8}.axm-assist-renderer__markdown :is(h1,h2,h3,h4,h5,h6){margin:.55rem 0 .35rem;line-height:1.35;font-weight:600}.axm-assist-renderer__markdown p{margin:.35rem 0}.axm-assist-renderer__markdown ul{margin:.4rem 0;padding-inline-start:1.1rem}.axm-assist-renderer__markdown blockquote{margin:.5rem 0;padding-inline:.65rem .5rem;border-inline-start:3px solid rgba(var(--ax-sys-color-primary),.35);background:rgba(var(--ax-sys-color-primary),.06);border-radius:.25rem}.axm-assist-renderer__markdown code{font-family:var(--ax-font-mono, monospace);font-size:.9em;padding:.1rem .3rem;border-radius:.25rem;background:var(--ax-color-ghost, rgba(0, 0, 0, .06))}.axm-assist-renderer__accordion-group{width:100%}.axm-assist-renderer__accordion-header{display:flex;align-items:center;justify-content:space-between;gap:.75rem;padding:.625rem .75rem;cursor:pointer;background-color:rgb(var(--ax-sys-color-lighter-surface));color:rgb(var(--ax-sys-color-on-lighter-surface));border-color:rgb(var(--ax-sys-color-border-lighter-surface))}.axm-assist-renderer__accordion-header-main{min-inline-size:0;display:flex;flex-direction:column;gap:.1rem}.axm-assist-renderer__accordion-header-title{font-size:.78rem;line-height:1.2;font-weight:600;color:var(--ax-color-text-primary, #111827);display:inline-flex;align-items:center;gap:.35rem}.axm-assist-renderer__accordion-header-badge{flex-shrink:0}.axm-assist-renderer__accordion-header-badge--primary{background:rgba(var(--ax-sys-color-primary),.12);border-color:rgba(var(--ax-sys-color-primary),.25);color:rgb(var(--ax-sys-color-primary))}.axm-assist-renderer__accordion-header-badge--success{background:#16a34a1f;border-color:#16a34a40;color:#15803d}.axm-assist-renderer__accordion-header-badge--danger{background:#dc26261f;border-color:#dc262640;color:#b91c1c}.axm-assist-renderer__accordion-header--thinking{background:linear-gradient(180deg,#f59e0b1f,#f59e0b0a),var(--ax-color-surface, #fff)}.axm-assist-renderer__thinking-body{padding:0 .75rem .625rem;font-size:.75rem;color:var(--ax-color-text-muted, #888);white-space:pre-wrap;word-break:break-word;line-height:1.5;border-block-start:1px solid var(--ax-color-border-default, rgba(0, 0, 0, .06));padding-block-start:.5rem}.axm-assist-renderer__tools{display:flex;flex-direction:column;gap:.375rem}.axm-assist-renderer__tool-card{border-radius:.5rem;border:1px solid var(--ax-color-border-default, rgba(0, 0, 0, .08));background:var(--ax-color-surface, rgba(255, 255, 255, .6));overflow:hidden}.axm-assist-renderer__tool-body{padding:.5rem .75rem .625rem;border-block-start:1px solid var(--ax-color-border-default, rgba(0, 0, 0, .06));display:flex;flex-direction:column;gap:.25rem}.axm-assist-renderer__tool-section-label{font-size:.625rem;font-weight:600;text-transform:uppercase;letter-spacing:.05em;color:var(--ax-color-text-muted, #888)}.axm-assist-renderer__tool-pre{margin:0;max-block-size:10rem;overflow:auto;border-radius:.375rem;background:var(--ax-color-ghost, rgba(0, 0, 0, .03));padding:.5rem;font-family:var(--ax-font-mono, monospace);font-size:.675rem;line-height:1.45;white-space:pre-wrap;word-break:break-word}.axm-assist-renderer__tool-editor-wrap{border-radius:.375rem;overflow:hidden}.axm-assist-renderer__waiting{display:flex;gap:.25rem;padding:.25rem 0}.axm-assist-renderer__dot{inline-size:6px;block-size:6px;border-radius:50%;background:var(--ax-color-text-muted, #999);animation:axm-blink 1.2s ease-in-out infinite}.axm-assist-renderer__dot:nth-child(2){animation-delay:.2s}.axm-assist-renderer__dot:nth-child(3){animation-delay:.4s}.axm-assist-renderer__agent-live-block{border-radius:.75rem;border:1px solid var(--ax-color-border-default, rgba(0, 0, 0, .1));background:var(--ax-color-surface, rgba(255, 255, 255, .72));padding:.75rem .875rem;display:flex;flex-direction:column;gap:.65rem;max-inline-size:min(42rem,100%)}.axm-assist-renderer__agent-live-header{display:flex;align-items:center;flex-wrap:wrap;gap:.5rem}.axm-assist-renderer__agent-live-title{font-size:.8125rem;font-weight:600;color:var(--ax-color-text-primary, #111827);flex:1;min-inline-size:0}.axm-assist-renderer__agent-live-prompt{font-size:.8125rem;line-height:1.55;white-space:pre-wrap;word-break:break-word;padding:.5rem .75rem;border-radius:1.25rem;background:var(--ax-color-ghost, rgba(0, 0, 0, .05));align-self:flex-end;max-inline-size:min(92%,36rem)}.axm-assist-renderer__agent-live-stream{font-size:.8125rem;line-height:1.55;white-space:pre-line;word-break:break-word;padding-block-start:.15rem}.axm-assist-renderer__agent-live-nested-tools{display:flex;flex-direction:column;gap:.35rem;padding-block-start:.15rem;border-block-start:1px solid var(--ax-color-border-default, rgba(0, 0, 0, .08))}.axm-assist-renderer__agent-live-nested-row{display:flex;align-items:center;gap:.45rem;font-size:.72rem}.axm-assist-renderer__agent-live-nested-name{font-family:var(--ax-font-mono, monospace);font-size:.7rem;flex:1;min-inline-size:0;overflow:hidden;text-overflow:ellipsis}.axm-assist-renderer__agent-live-nested-status{color:var(--ax-color-text-muted, #888);flex-shrink:0}\n"] }]
4552
+ `, styles: [".axm-assist-renderer{display:flex;flex-direction:column;gap:.5rem}.axm-assist-bot{display:flex;flex-direction:column;gap:.75rem}.axm-assist-bot__segment{unicode-bidi:isolate;font-size:.95rem;line-height:1.8;letter-spacing:.002em;color:rgb(var(--ax-sys-color-on-surface));text-wrap:pretty}.axm-assist-bot__line--user{align-self:flex-end}.axm-assist-bot__line--tool-role{align-self:stretch}.axm-assist-bot__tool-result{border-radius:.5rem;border:1px solid var(--ax-color-border-default, rgba(0, 0, 0, .1));background:var(--ax-color-surface, rgba(0, 0, 0, .02));padding:.5rem .75rem}.axm-assist-bot__fallback{font-size:.88rem;line-height:1.75;white-space:pre-wrap;word-break:break-word;opacity:.9}.axm-assist-renderer__cursor{display:inline-block;inline-size:6px;block-size:1em;margin-inline-start:2px;background:var(--ax-color-primary-500);border-radius:1px;animation:axm-blink .8s steps(2) infinite;vertical-align:text-bottom}@keyframes axm-blink{0%{opacity:1}50%{opacity:0}}.axm-assist-renderer__stream-content{display:flex;flex-direction:column;gap:.5rem}.axm-assist-renderer__streaming-activity{display:flex;align-items:center;gap:.5rem;padding-block:.15rem}.axm-assist-renderer__activity-label{line-height:1.45}.axm-assist-renderer__text{white-space:pre-line;word-break:break-word;line-height:1.85;font-size:.95rem;letter-spacing:.002em;text-wrap:pretty}.axm-assist-bot__segment ax-conversation-text-renderer{display:block}.axm-assist-bot__segment ax-conversation-text-renderer :is(p,ul,ol){margin-block:.45rem}.axm-assist-bot__segment ax-conversation-text-renderer li{line-height:1.8}.axm-assist-renderer__markdown :is(h1,h2,h3,h4,h5,h6){margin:.55rem 0 .35rem;line-height:1.35;font-weight:600}.axm-assist-renderer__markdown p{margin:.35rem 0}.axm-assist-renderer__markdown ul{margin:.4rem 0;padding-inline-start:1.1rem}.axm-assist-renderer__markdown blockquote{margin:.5rem 0;padding-inline:.65rem .5rem;border-inline-start:3px solid rgba(var(--ax-sys-color-primary),.35);background:rgba(var(--ax-sys-color-primary),.06);border-radius:.25rem}.axm-assist-renderer__markdown code{font-family:var(--ax-font-mono, monospace);font-size:.9em;padding:.1rem .3rem;border-radius:.25rem;background:var(--ax-color-ghost, rgba(0, 0, 0, .06))}.axm-assist-renderer__accordion-group{width:100%}.axm-assist-renderer__accordion-header{display:flex;align-items:center;justify-content:space-between;gap:.75rem;padding:.625rem .75rem;cursor:pointer;background-color:rgb(var(--ax-sys-color-lighter-surface));color:rgb(var(--ax-sys-color-on-lighter-surface));border-color:rgb(var(--ax-sys-color-border-lighter-surface))}.axm-assist-renderer__accordion-header-main{min-inline-size:0;display:flex;flex-direction:column;gap:.1rem}.axm-assist-renderer__accordion-header-title{font-size:.78rem;line-height:1.2;font-weight:600;color:var(--ax-color-text-primary, #111827);display:inline-flex;align-items:center;gap:.35rem}.axm-assist-renderer__accordion-header-badge{flex-shrink:0}.axm-assist-renderer__accordion-header-badge--primary{background:rgba(var(--ax-sys-color-primary),.12);border-color:rgba(var(--ax-sys-color-primary),.25);color:rgb(var(--ax-sys-color-primary))}.axm-assist-renderer__accordion-header-badge--success{background:#16a34a1f;border-color:#16a34a40;color:#15803d}.axm-assist-renderer__accordion-header-badge--danger{background:#dc26261f;border-color:#dc262640;color:#b91c1c}.axm-assist-renderer__accordion-header--thinking{background:linear-gradient(180deg,#f59e0b1f,#f59e0b0a),var(--ax-color-surface, #fff)}.axm-assist-renderer__thinking-chevron{display:inline-block;font-size:.65rem;opacity:.75;transition:transform .2s ease;line-height:1;flex-shrink:0}.axm-assist-renderer__thinking-chevron--expanded{transform:rotate(180deg)}.axm-assist-renderer__thinking-body{padding:0 .75rem .625rem;font-size:.75rem;color:var(--ax-color-text-muted, #888);white-space:pre-wrap;word-break:break-word;line-height:1.5;border-block-start:1px solid var(--ax-color-border-default, rgba(0, 0, 0, .06));padding-block-start:.5rem}.axm-assist-renderer__tools{display:flex;flex-direction:column;gap:.375rem}.axm-assist-renderer__tool-card{border-radius:.5rem;border:1px solid var(--ax-color-border-default, rgba(0, 0, 0, .08));background:var(--ax-color-surface, rgba(255, 255, 255, .6));overflow:hidden}.axm-assist-renderer__tool-body{padding:.5rem .75rem .625rem;border-block-start:1px solid var(--ax-color-border-default, rgba(0, 0, 0, .06));display:flex;flex-direction:column;gap:.25rem}.axm-assist-renderer__tool-section-label{font-size:.625rem;font-weight:600;text-transform:uppercase;letter-spacing:.05em;color:var(--ax-color-text-muted, #888)}.axm-assist-renderer__tool-pre{margin:0;max-block-size:10rem;overflow:auto;border-radius:.375rem;background:var(--ax-color-ghost, rgba(0, 0, 0, .03));padding:.5rem;font-family:var(--ax-font-mono, monospace);font-size:.675rem;line-height:1.45;white-space:pre-wrap;word-break:break-word}.axm-assist-renderer__tool-editor-wrap{border-radius:.375rem;overflow:hidden}.axm-assist-renderer__waiting{display:flex;gap:.25rem;padding:.25rem 0}.axm-assist-renderer__dot{inline-size:6px;block-size:6px;border-radius:50%;background:var(--ax-color-text-muted, #999);animation:axm-blink 1.2s ease-in-out infinite}.axm-assist-renderer__dot:nth-child(2){animation-delay:.2s}.axm-assist-renderer__dot:nth-child(3){animation-delay:.4s}.axm-assist-renderer__agent-live-block{border-radius:.75rem;border:1px solid var(--ax-color-border-default, rgba(0, 0, 0, .1));background:var(--ax-color-surface, rgba(255, 255, 255, .72));padding:.75rem .875rem;display:flex;flex-direction:column;gap:.65rem;max-inline-size:min(42rem,100%)}.axm-assist-renderer__agent-live-block--in-accordion{border:none;border-radius:0;background:transparent;padding:.5rem 0 0;max-inline-size:none}.axm-assist-renderer__agent-live-header{display:flex;align-items:center;flex-wrap:wrap;gap:.5rem}.axm-assist-renderer__agent-live-title{font-size:.8125rem;font-weight:600;color:var(--ax-color-text-primary, #111827);flex:1;min-inline-size:0}.axm-assist-renderer__agent-live-prompt{font-size:.8125rem;line-height:1.55;white-space:pre-wrap;word-break:break-word;padding:.5rem .75rem;border-radius:1.25rem;background:var(--ax-color-ghost, rgba(0, 0, 0, .05));align-self:flex-end;max-inline-size:min(92%,36rem)}.axm-assist-renderer__agent-live-stream{font-size:.8125rem;line-height:1.55;white-space:pre-line;word-break:break-word;padding-block-start:.15rem}.axm-assist-renderer__agent-live-nested-tools{display:flex;flex-direction:column;gap:.35rem;padding-block-start:.15rem;border-block-start:1px solid var(--ax-color-border-default, rgba(0, 0, 0, .08))}.axm-assist-renderer__agent-live-nested-row{display:flex;align-items:center;gap:.45rem;font-size:.72rem}.axm-assist-renderer__agent-live-nested-name{font-family:var(--ax-font-mono, monospace);font-size:.7rem;flex:1;min-inline-size:0;overflow:hidden;text-overflow:ellipsis}.axm-assist-renderer__agent-live-nested-status{color:var(--ax-color-text-muted, #888);flex-shrink:0}\n"] }]
3756
4553
  }], propDecorators: { message: [{ type: i0.Input, args: [{ isSignal: true, alias: "message", required: true }] }] } });
3757
4554
  //#endregion
3758
4555
  //#region ---- Thinking Parser ----