@acorex/modules 21.0.0-next.41 → 21.0.0-next.43

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 (364) hide show
  1. package/fesm2022/acorex-modules-ai-management-agent-registry-tool-configurator-widget-column.component-D0ruV6aJ.mjs.map +1 -1
  2. package/fesm2022/{acorex-modules-ai-management-agent-registry-tool-configurator-widget-edit.component-C7TQMwX4.mjs → acorex-modules-ai-management-agent-registry-tool-configurator-widget-edit.component-C-XsPEIg.mjs} +2 -2
  3. package/fesm2022/acorex-modules-ai-management-agent-registry-tool-configurator-widget-edit.component-C-XsPEIg.mjs.map +1 -0
  4. package/fesm2022/{acorex-modules-ai-management-agent.entity-DwPIKib2.mjs → acorex-modules-ai-management-agent.entity-D6-0_Ms3.mjs} +2 -2
  5. package/fesm2022/acorex-modules-ai-management-agent.entity-D6-0_Ms3.mjs.map +1 -0
  6. package/fesm2022/acorex-modules-ai-management-assist-delegated-agent-configurator-widget-column.component-DSC48iD0.mjs.map +1 -1
  7. package/fesm2022/{acorex-modules-ai-management-assist-delegated-agent-configurator-widget-edit.component-BozVAuLO.mjs → acorex-modules-ai-management-assist-delegated-agent-configurator-widget-edit.component-u1hZ4P5s.mjs} +2 -2
  8. package/fesm2022/acorex-modules-ai-management-assist-delegated-agent-configurator-widget-edit.component-u1hZ4P5s.mjs.map +1 -0
  9. package/fesm2022/{acorex-modules-ai-management-assist.entity-CuToMDS_.mjs → acorex-modules-ai-management-assist.entity-DfW-FFCt.mjs} +2 -2
  10. package/fesm2022/{acorex-modules-ai-management-assist.entity-CuToMDS_.mjs.map → acorex-modules-ai-management-assist.entity-DfW-FFCt.mjs.map} +1 -1
  11. package/fesm2022/{acorex-modules-ai-management-model.entity-vUNlioDw.mjs → acorex-modules-ai-management-model.entity-DiDaXVa3.mjs} +2 -2
  12. package/fesm2022/{acorex-modules-ai-management-model.entity-vUNlioDw.mjs.map → acorex-modules-ai-management-model.entity-DiDaXVa3.mjs.map} +1 -1
  13. package/fesm2022/{acorex-modules-ai-management-open-ai-endpoint.entity-BpxRR5ir.mjs → acorex-modules-ai-management-open-ai-endpoint.entity-CZLNKtl0.mjs} +2 -2
  14. package/fesm2022/{acorex-modules-ai-management-open-ai-endpoint.entity-BpxRR5ir.mjs.map → acorex-modules-ai-management-open-ai-endpoint.entity-CZLNKtl0.mjs.map} +1 -1
  15. package/fesm2022/acorex-modules-ai-management.mjs +4636 -1
  16. package/fesm2022/acorex-modules-ai-management.mjs.map +1 -1
  17. package/fesm2022/{acorex-modules-application-management-features-widget-view.component-DlfkfOay.mjs → acorex-modules-application-management-features-widget-view.component-uc8eGA-k.mjs} +2 -2
  18. package/fesm2022/{acorex-modules-application-management-features-widget-view.component-DlfkfOay.mjs.map → acorex-modules-application-management-features-widget-view.component-uc8eGA-k.mjs.map} +1 -1
  19. package/fesm2022/acorex-modules-application-management.mjs +22 -77
  20. package/fesm2022/acorex-modules-application-management.mjs.map +1 -1
  21. package/fesm2022/{acorex-modules-assessment-management-acorex-modules-assessment-management-CMS2WJDu.mjs → acorex-modules-assessment-management-acorex-modules-assessment-management-c8OrTwDw.mjs} +26 -26
  22. package/fesm2022/{acorex-modules-assessment-management-acorex-modules-assessment-management-CMS2WJDu.mjs.map → acorex-modules-assessment-management-acorex-modules-assessment-management-c8OrTwDw.mjs.map} +1 -1
  23. package/fesm2022/{acorex-modules-assessment-management-assessment-case.entity-C-Q4hu8o.mjs → acorex-modules-assessment-management-assessment-case.entity-DEsJE7x3.mjs} +2 -2
  24. package/fesm2022/{acorex-modules-assessment-management-assessment-case.entity-C-Q4hu8o.mjs.map → acorex-modules-assessment-management-assessment-case.entity-DEsJE7x3.mjs.map} +1 -1
  25. package/fesm2022/{acorex-modules-assessment-management-assessment-session.entity-CQI_FpUd.mjs → acorex-modules-assessment-management-assessment-session.entity-eNFfu-Jq.mjs} +2 -2
  26. package/fesm2022/{acorex-modules-assessment-management-assessment-session.entity-CQI_FpUd.mjs.map → acorex-modules-assessment-management-assessment-session.entity-eNFfu-Jq.mjs.map} +1 -1
  27. package/fesm2022/{acorex-modules-assessment-management-fill-assessment-session.command-Bpvco5iD.mjs → acorex-modules-assessment-management-fill-assessment-session.command-BeSUBkI9.mjs} +2 -2
  28. package/fesm2022/{acorex-modules-assessment-management-fill-assessment-session.command-Bpvco5iD.mjs.map → acorex-modules-assessment-management-fill-assessment-session.command-BeSUBkI9.mjs.map} +1 -1
  29. package/fesm2022/{acorex-modules-assessment-management-index-_fPuBQeK.mjs → acorex-modules-assessment-management-index-3GB9Xkyv.mjs} +4 -4
  30. package/fesm2022/{acorex-modules-assessment-management-index-_fPuBQeK.mjs.map → acorex-modules-assessment-management-index-3GB9Xkyv.mjs.map} +1 -1
  31. package/fesm2022/{acorex-modules-assessment-management-preview-question.command-drR6nq76.mjs → acorex-modules-assessment-management-preview-question.command-QinKZtTz.mjs} +2 -2
  32. package/fesm2022/{acorex-modules-assessment-management-preview-question.command-drR6nq76.mjs.map → acorex-modules-assessment-management-preview-question.command-QinKZtTz.mjs.map} +1 -1
  33. package/fesm2022/{acorex-modules-assessment-management-preview-questionnaire.command-CY8tZWdG.mjs → acorex-modules-assessment-management-preview-questionnaire.command-CKZYSyOv.mjs} +2 -2
  34. package/fesm2022/{acorex-modules-assessment-management-preview-questionnaire.command-CY8tZWdG.mjs.map → acorex-modules-assessment-management-preview-questionnaire.command-CKZYSyOv.mjs.map} +1 -1
  35. package/fesm2022/{acorex-modules-assessment-management-question-bank-interface-editor-widget-edit.component-DV9irFZ0.mjs → acorex-modules-assessment-management-question-bank-interface-editor-widget-edit.component-qZXANgNr.mjs} +2 -2
  36. package/fesm2022/{acorex-modules-assessment-management-question-bank-interface-editor-widget-edit.component-DV9irFZ0.mjs.map → acorex-modules-assessment-management-question-bank-interface-editor-widget-edit.component-qZXANgNr.mjs.map} +1 -1
  37. package/fesm2022/{acorex-modules-assessment-management-question-bank-item.entity-DO4bTKKo.mjs → acorex-modules-assessment-management-question-bank-item.entity-Dp4eYR3O.mjs} +2 -2
  38. package/fesm2022/{acorex-modules-assessment-management-question-bank-item.entity-DO4bTKKo.mjs.map → acorex-modules-assessment-management-question-bank-item.entity-Dp4eYR3O.mjs.map} +1 -1
  39. package/fesm2022/{acorex-modules-assessment-management-questionnaire-calculation.entity-B-N0v4zs.mjs → acorex-modules-assessment-management-questionnaire-calculation.entity-BMB9IEIv.mjs} +2 -2
  40. package/fesm2022/{acorex-modules-assessment-management-questionnaire-calculation.entity-B-N0v4zs.mjs.map → acorex-modules-assessment-management-questionnaire-calculation.entity-BMB9IEIv.mjs.map} +1 -1
  41. package/fesm2022/{acorex-modules-assessment-management-questionnaire-viewer-popup.component-Cc-o6qmY.mjs → acorex-modules-assessment-management-questionnaire-viewer-popup.component-DgC1xuH9.mjs} +2 -2
  42. package/fesm2022/{acorex-modules-assessment-management-questionnaire-viewer-popup.component-Cc-o6qmY.mjs.map → acorex-modules-assessment-management-questionnaire-viewer-popup.component-DgC1xuH9.mjs.map} +1 -1
  43. package/fesm2022/{acorex-modules-assessment-management-questionnaire.entity-CJWNlaJs.mjs → acorex-modules-assessment-management-questionnaire.entity-ChUNq9Bc.mjs} +3 -3
  44. package/fesm2022/{acorex-modules-assessment-management-questionnaire.entity-CJWNlaJs.mjs.map → acorex-modules-assessment-management-questionnaire.entity-ChUNq9Bc.mjs.map} +1 -1
  45. package/fesm2022/{acorex-modules-assessment-management-save-questionnaire-questions.command-C3gOkZa5.mjs → acorex-modules-assessment-management-save-questionnaire-questions.command-sji05ut4.mjs} +2 -2
  46. package/fesm2022/{acorex-modules-assessment-management-save-questionnaire-questions.command-C3gOkZa5.mjs.map → acorex-modules-assessment-management-save-questionnaire-questions.command-sji05ut4.mjs.map} +1 -1
  47. package/fesm2022/{acorex-modules-assessment-management-view-session-answers.command-AvTbWvGE.mjs → acorex-modules-assessment-management-view-session-answers.command-BIpotfIE.mjs} +2 -2
  48. package/fesm2022/{acorex-modules-assessment-management-view-session-answers.command-AvTbWvGE.mjs.map → acorex-modules-assessment-management-view-session-answers.command-BIpotfIE.mjs.map} +1 -1
  49. package/fesm2022/acorex-modules-assessment-management.mjs +1 -1
  50. package/fesm2022/{acorex-modules-asset-management-acorex-modules-asset-management-DrIhRaZ6.mjs → acorex-modules-asset-management-acorex-modules-asset-management-fQ0rp8vu.mjs} +765 -131
  51. package/fesm2022/acorex-modules-asset-management-acorex-modules-asset-management-fQ0rp8vu.mjs.map +1 -0
  52. package/fesm2022/acorex-modules-asset-management-asset-rental-history-status.provider-BiWf2TwD.mjs +118 -0
  53. package/fesm2022/acorex-modules-asset-management-asset-rental-history-status.provider-BiWf2TwD.mjs.map +1 -0
  54. package/fesm2022/{acorex-modules-asset-management-asset-system-assignment.entity-HqZtfJpe.mjs → acorex-modules-asset-management-asset-system-assignment.entity-DuFgujR6.mjs} +2 -2
  55. package/fesm2022/{acorex-modules-asset-management-asset-system-assignment.entity-HqZtfJpe.mjs.map → acorex-modules-asset-management-asset-system-assignment.entity-DuFgujR6.mjs.map} +1 -1
  56. package/fesm2022/{acorex-modules-asset-management-asset-system-type.entity-fvrbyjXb.mjs → acorex-modules-asset-management-asset-system-type.entity-sszGMFny.mjs} +2 -2
  57. package/fesm2022/{acorex-modules-asset-management-asset-system-type.entity-fvrbyjXb.mjs.map → acorex-modules-asset-management-asset-system-type.entity-sszGMFny.mjs.map} +1 -1
  58. package/fesm2022/{acorex-modules-asset-management-asset-system.entity-DVAaXNWx.mjs → acorex-modules-asset-management-asset-system.entity-tWUPNYQq.mjs} +2 -2
  59. package/fesm2022/{acorex-modules-asset-management-asset-system.entity-DVAaXNWx.mjs.map → acorex-modules-asset-management-asset-system.entity-tWUPNYQq.mjs.map} +1 -1
  60. package/fesm2022/{acorex-modules-asset-management-asset-type-section-component.entity-n-bxBcGz.mjs → acorex-modules-asset-management-asset-type-section-component.entity-l3xXMo2l.mjs} +32 -31
  61. package/fesm2022/acorex-modules-asset-management-asset-type-section-component.entity-l3xXMo2l.mjs.map +1 -0
  62. package/fesm2022/{acorex-modules-asset-management-asset-type-section.entity-BF7N699p.mjs → acorex-modules-asset-management-asset-type-section.entity-CldvQBUW.mjs} +2 -2
  63. package/fesm2022/{acorex-modules-asset-management-asset-type-section.entity-BF7N699p.mjs.map → acorex-modules-asset-management-asset-type-section.entity-CldvQBUW.mjs.map} +1 -1
  64. package/fesm2022/{acorex-modules-asset-management-asset-type.entity-Dt61Rs4F.mjs → acorex-modules-asset-management-asset-type.entity-CP0dryvp.mjs} +108 -28
  65. package/fesm2022/acorex-modules-asset-management-asset-type.entity-CP0dryvp.mjs.map +1 -0
  66. package/fesm2022/{acorex-modules-asset-management-asset.entity-BzlsaEwC.mjs → acorex-modules-asset-management-asset.entity-Du_fWe9V.mjs} +21 -230
  67. package/fesm2022/acorex-modules-asset-management-asset.entity-Du_fWe9V.mjs.map +1 -0
  68. package/fesm2022/acorex-modules-asset-management.mjs +1 -1
  69. package/fesm2022/{acorex-modules-auth-acorex-modules-auth-BUtk_RQC.mjs → acorex-modules-auth-acorex-modules-auth-CGiDe3e-.mjs} +13 -13
  70. package/fesm2022/{acorex-modules-auth-acorex-modules-auth-BUtk_RQC.mjs.map → acorex-modules-auth-acorex-modules-auth-CGiDe3e-.mjs.map} +1 -1
  71. package/fesm2022/{acorex-modules-auth-app-chooser.component-DnVYLE4q.mjs → acorex-modules-auth-app-chooser.component-Dt_2eXel.mjs} +2 -2
  72. package/fesm2022/{acorex-modules-auth-app-chooser.component-DnVYLE4q.mjs.map → acorex-modules-auth-app-chooser.component-Dt_2eXel.mjs.map} +1 -1
  73. package/fesm2022/{acorex-modules-auth-login.module-Be-fhX-L.mjs → acorex-modules-auth-login.module-Bl8pAhHc.mjs} +4 -4
  74. package/fesm2022/{acorex-modules-auth-login.module-Be-fhX-L.mjs.map → acorex-modules-auth-login.module-Bl8pAhHc.mjs.map} +1 -1
  75. package/fesm2022/{acorex-modules-auth-master.layout-6n06jHF4.mjs → acorex-modules-auth-master.layout-B8GSev0J.mjs} +2 -2
  76. package/fesm2022/{acorex-modules-auth-master.layout-6n06jHF4.mjs.map → acorex-modules-auth-master.layout-B8GSev0J.mjs.map} +1 -1
  77. package/fesm2022/{acorex-modules-auth-oauth-callback.component-B_u8aKEs.mjs → acorex-modules-auth-oauth-callback.component-DleQ24IP.mjs} +3 -3
  78. package/fesm2022/{acorex-modules-auth-oauth-callback.component-B_u8aKEs.mjs.map → acorex-modules-auth-oauth-callback.component-DleQ24IP.mjs.map} +1 -1
  79. package/fesm2022/{acorex-modules-auth-password.component-Bz6qjJ_G.mjs → acorex-modules-auth-password.component-C1GbARlM.mjs} +2 -2
  80. package/fesm2022/{acorex-modules-auth-password.component-Bz6qjJ_G.mjs.map → acorex-modules-auth-password.component-C1GbARlM.mjs.map} +1 -1
  81. package/fesm2022/{acorex-modules-auth-password.component-w9qdHuT5.mjs → acorex-modules-auth-password.component-D6ALMoO4.mjs} +2 -2
  82. package/fesm2022/{acorex-modules-auth-password.component-w9qdHuT5.mjs.map → acorex-modules-auth-password.component-D6ALMoO4.mjs.map} +1 -1
  83. package/fesm2022/{acorex-modules-auth-routes-CUbjrK-J.mjs → acorex-modules-auth-routes-FDp1SEZA.mjs} +2 -2
  84. package/fesm2022/{acorex-modules-auth-routes-CUbjrK-J.mjs.map → acorex-modules-auth-routes-FDp1SEZA.mjs.map} +1 -1
  85. package/fesm2022/{acorex-modules-auth-settings.provider-DkhbuDBO.mjs → acorex-modules-auth-settings.provider-CN7Lb38l.mjs} +26 -31
  86. package/fesm2022/acorex-modules-auth-settings.provider-CN7Lb38l.mjs.map +1 -0
  87. package/fesm2022/{acorex-modules-auth-tenant-chooser.component-D_cV-RUp.mjs → acorex-modules-auth-tenant-chooser.component-o55sauLG.mjs} +2 -2
  88. package/fesm2022/{acorex-modules-auth-tenant-chooser.component-D_cV-RUp.mjs.map → acorex-modules-auth-tenant-chooser.component-o55sauLG.mjs.map} +1 -1
  89. package/fesm2022/{acorex-modules-auth-two-factor.module-ok-nT2VM.mjs → acorex-modules-auth-two-factor.module-CVrYPw5D.mjs} +2 -2
  90. package/fesm2022/{acorex-modules-auth-two-factor.module-ok-nT2VM.mjs.map → acorex-modules-auth-two-factor.module-CVrYPw5D.mjs.map} +1 -1
  91. package/fesm2022/{acorex-modules-auth-user-sessions.component-Cmrx3_vM.mjs → acorex-modules-auth-user-sessions.component-BVglZAnc.mjs} +2 -2
  92. package/fesm2022/{acorex-modules-auth-user-sessions.component-Cmrx3_vM.mjs.map → acorex-modules-auth-user-sessions.component-BVglZAnc.mjs.map} +1 -1
  93. package/fesm2022/acorex-modules-auth.mjs +1 -1
  94. package/fesm2022/{acorex-modules-common-search-popup.component-UIz5Bphx.mjs → acorex-modules-common-search-popup.component-BbRyjGia.mjs} +2 -2
  95. package/fesm2022/{acorex-modules-common-search-popup.component-UIz5Bphx.mjs.map → acorex-modules-common-search-popup.component-BbRyjGia.mjs.map} +1 -1
  96. package/fesm2022/acorex-modules-common.mjs +10 -35
  97. package/fesm2022/acorex-modules-common.mjs.map +1 -1
  98. package/fesm2022/{acorex-modules-content-management-acorex-modules-content-management-of3UnjxP.mjs → acorex-modules-content-management-acorex-modules-content-management-CO8lZb34.mjs} +40 -6
  99. package/fesm2022/acorex-modules-content-management-acorex-modules-content-management-CO8lZb34.mjs.map +1 -0
  100. package/fesm2022/{acorex-modules-content-management-permission-definition.provider-DnjtPg6f.mjs → acorex-modules-content-management-permission-definition.provider-Bcq5uOVH.mjs} +2 -2
  101. package/fesm2022/{acorex-modules-content-management-permission-definition.provider-DnjtPg6f.mjs.map → acorex-modules-content-management-permission-definition.provider-Bcq5uOVH.mjs.map} +1 -1
  102. package/fesm2022/{acorex-modules-content-management-template-content-editor-widget-edit.component-BKHvQiql.mjs → acorex-modules-content-management-template-content-editor-widget-edit.component-D_q_xWeI.mjs} +59 -16
  103. package/fesm2022/acorex-modules-content-management-template-content-editor-widget-edit.component-D_q_xWeI.mjs.map +1 -0
  104. package/fesm2022/{acorex-modules-content-management-template-content-editor-widget-view.component-q1Se62Hd.mjs → acorex-modules-content-management-template-content-editor-widget-view.component-DU5y6UxK.mjs} +15 -5
  105. package/fesm2022/acorex-modules-content-management-template-content-editor-widget-view.component-DU5y6UxK.mjs.map +1 -0
  106. package/fesm2022/acorex-modules-content-management.mjs +1 -1
  107. package/fesm2022/acorex-modules-conversation-acorex-modules-conversation-BJU2_R9O.mjs +6155 -0
  108. package/fesm2022/acorex-modules-conversation-acorex-modules-conversation-BJU2_R9O.mjs.map +1 -0
  109. package/fesm2022/acorex-modules-conversation-assist-delegated-agent-detail-popup.component-DX2JPckF.mjs +324 -0
  110. package/fesm2022/acorex-modules-conversation-assist-delegated-agent-detail-popup.component-DX2JPckF.mjs.map +1 -0
  111. package/fesm2022/{acorex-modules-conversation-comments-page.component-DnAbpVxZ.mjs → acorex-modules-conversation-comments-page.component-Bg6m7UTG.mjs} +2 -2
  112. package/fesm2022/{acorex-modules-conversation-comments-page.component-DnAbpVxZ.mjs.map → acorex-modules-conversation-comments-page.component-Bg6m7UTG.mjs.map} +1 -1
  113. package/fesm2022/acorex-modules-conversation.mjs +1 -7353
  114. package/fesm2022/acorex-modules-conversation.mjs.map +1 -1
  115. package/fesm2022/{acorex-modules-dashboard-management-acorex-modules-dashboard-management-DLndkp6w.mjs → acorex-modules-dashboard-management-acorex-modules-dashboard-management-D11VudG8.mjs} +6 -7
  116. package/fesm2022/acorex-modules-dashboard-management-acorex-modules-dashboard-management-D11VudG8.mjs.map +1 -0
  117. package/fesm2022/{acorex-modules-dashboard-management-index-c8QzHHtG.mjs → acorex-modules-dashboard-management-index-DB3Uh1wL.mjs} +2 -2
  118. package/fesm2022/{acorex-modules-dashboard-management-index-c8QzHHtG.mjs.map → acorex-modules-dashboard-management-index-DB3Uh1wL.mjs.map} +1 -1
  119. package/fesm2022/acorex-modules-dashboard-management.mjs +1 -1
  120. package/fesm2022/acorex-modules-data-management.mjs +4 -4
  121. package/fesm2022/acorex-modules-data-management.mjs.map +1 -1
  122. package/fesm2022/acorex-modules-document-management-large-tiles-view.component-BZWN7WCX.mjs +24 -0
  123. package/fesm2022/acorex-modules-document-management-large-tiles-view.component-BZWN7WCX.mjs.map +1 -0
  124. package/fesm2022/acorex-modules-document-management-small-tiles-view.component-DI6QQ2St.mjs +24 -0
  125. package/fesm2022/acorex-modules-document-management-small-tiles-view.component-DI6QQ2St.mjs.map +1 -0
  126. package/fesm2022/acorex-modules-document-management.mjs +209 -397
  127. package/fesm2022/acorex-modules-document-management.mjs.map +1 -1
  128. package/fesm2022/{acorex-modules-form-template-management-template-picker.component-GHXF4eT3.mjs → acorex-modules-form-template-management-template-picker.component-CtTkFhXf.mjs} +2 -2
  129. package/fesm2022/{acorex-modules-form-template-management-template-picker.component-GHXF4eT3.mjs.map → acorex-modules-form-template-management-template-picker.component-CtTkFhXf.mjs.map} +1 -1
  130. package/fesm2022/acorex-modules-form-template-management.mjs +14 -18
  131. package/fesm2022/acorex-modules-form-template-management.mjs.map +1 -1
  132. package/fesm2022/{acorex-modules-human-capital-management-acorex-modules-human-capital-management-Bgsi3FHG.mjs → acorex-modules-human-capital-management-acorex-modules-human-capital-management-Bwk3-2wy.mjs} +90 -79
  133. package/fesm2022/acorex-modules-human-capital-management-acorex-modules-human-capital-management-Bwk3-2wy.mjs.map +1 -0
  134. package/fesm2022/{acorex-modules-human-capital-management-approve-leave-request.command-CxpTmb-1.mjs → acorex-modules-human-capital-management-approve-leave-request.command-B5aSubCY.mjs} +2 -2
  135. package/fesm2022/{acorex-modules-human-capital-management-approve-leave-request.command-CxpTmb-1.mjs.map → acorex-modules-human-capital-management-approve-leave-request.command-B5aSubCY.mjs.map} +1 -1
  136. package/fesm2022/{acorex-modules-human-capital-management-assign-position-assignment.command-jLGe49dJ.mjs → acorex-modules-human-capital-management-assign-position-assignment.command-l8dGe3kg.mjs} +2 -2
  137. package/fesm2022/{acorex-modules-human-capital-management-assign-position-assignment.command-jLGe49dJ.mjs.map → acorex-modules-human-capital-management-assign-position-assignment.command-l8dGe3kg.mjs.map} +1 -1
  138. package/fesm2022/{acorex-modules-human-capital-management-cancel-leave-request.command-ChNGu90e.mjs → acorex-modules-human-capital-management-cancel-leave-request.command-CeV-5Y5n.mjs} +2 -2
  139. package/fesm2022/{acorex-modules-human-capital-management-cancel-leave-request.command-ChNGu90e.mjs.map → acorex-modules-human-capital-management-cancel-leave-request.command-CeV-5Y5n.mjs.map} +1 -1
  140. package/fesm2022/{acorex-modules-human-capital-management-employee.entity-4k7F7_ON.mjs → acorex-modules-human-capital-management-employee.entity-DNgt9yQm.mjs} +4 -2
  141. package/fesm2022/acorex-modules-human-capital-management-employee.entity-DNgt9yQm.mjs.map +1 -0
  142. package/fesm2022/{acorex-modules-human-capital-management-employment-type.entity-Jo2fB9R3.mjs → acorex-modules-human-capital-management-employment-type.entity-rq8-Bauc.mjs} +2 -2
  143. package/fesm2022/{acorex-modules-human-capital-management-employment-type.entity-Jo2fB9R3.mjs.map → acorex-modules-human-capital-management-employment-type.entity-rq8-Bauc.mjs.map} +1 -1
  144. package/fesm2022/{acorex-modules-human-capital-management-leave-request.entity-DhLUXnJu.mjs → acorex-modules-human-capital-management-leave-request.entity-DlQJw4F6.mjs} +2 -2
  145. package/fesm2022/{acorex-modules-human-capital-management-leave-request.entity-DhLUXnJu.mjs.map → acorex-modules-human-capital-management-leave-request.entity-DlQJw4F6.mjs.map} +1 -1
  146. package/fesm2022/{acorex-modules-human-capital-management-leave-type.entity-C-lN2bb0.mjs → acorex-modules-human-capital-management-leave-type.entity-D5J2oOuY.mjs} +2 -2
  147. package/fesm2022/{acorex-modules-human-capital-management-leave-type.entity-C-lN2bb0.mjs.map → acorex-modules-human-capital-management-leave-type.entity-D5J2oOuY.mjs.map} +1 -1
  148. package/fesm2022/{acorex-modules-human-capital-management-position-assignment.entity-BD1jN4Mx.mjs → acorex-modules-human-capital-management-position-assignment.entity-D7mKhxYp.mjs} +2 -2
  149. package/fesm2022/{acorex-modules-human-capital-management-position-assignment.entity-BD1jN4Mx.mjs.map → acorex-modules-human-capital-management-position-assignment.entity-D7mKhxYp.mjs.map} +1 -1
  150. package/fesm2022/{acorex-modules-human-capital-management-reject-leave-request.command-D0G6UrqI.mjs → acorex-modules-human-capital-management-reject-leave-request.command-C4AWFOmG.mjs} +2 -2
  151. package/fesm2022/{acorex-modules-human-capital-management-reject-leave-request.command-D0G6UrqI.mjs.map → acorex-modules-human-capital-management-reject-leave-request.command-C4AWFOmG.mjs.map} +1 -1
  152. package/fesm2022/{acorex-modules-human-capital-management-revoke-position-assignment.command-CYzqQXja.mjs → acorex-modules-human-capital-management-revoke-position-assignment.command-BSJhBW3p.mjs} +28 -17
  153. package/fesm2022/acorex-modules-human-capital-management-revoke-position-assignment.command-BSJhBW3p.mjs.map +1 -0
  154. package/fesm2022/acorex-modules-human-capital-management.mjs +1 -1
  155. package/fesm2022/acorex-modules-locale-management.mjs +72 -70
  156. package/fesm2022/acorex-modules-locale-management.mjs.map +1 -1
  157. package/fesm2022/acorex-modules-location-management.mjs +20 -10
  158. package/fesm2022/acorex-modules-location-management.mjs.map +1 -1
  159. package/fesm2022/{acorex-modules-maintenance-management-acorex-modules-maintenance-management-B5wf4zMI.mjs → acorex-modules-maintenance-management-acorex-modules-maintenance-management-C0LLBxMR.mjs} +40 -38
  160. package/fesm2022/acorex-modules-maintenance-management-acorex-modules-maintenance-management-C0LLBxMR.mjs.map +1 -0
  161. package/fesm2022/{acorex-modules-maintenance-management-failure-effect.entity-Cv5KnboB.mjs → acorex-modules-maintenance-management-failure-effect.entity-D8yOqKWQ.mjs} +2 -2
  162. package/fesm2022/{acorex-modules-maintenance-management-failure-effect.entity-Cv5KnboB.mjs.map → acorex-modules-maintenance-management-failure-effect.entity-D8yOqKWQ.mjs.map} +1 -1
  163. package/fesm2022/{acorex-modules-maintenance-management-failure-mode-asset-type.entity-BBL3-hfv.mjs → acorex-modules-maintenance-management-failure-mode-asset-type.entity-CHXkbEHG.mjs} +2 -2
  164. package/fesm2022/{acorex-modules-maintenance-management-failure-mode-asset-type.entity-BBL3-hfv.mjs.map → acorex-modules-maintenance-management-failure-mode-asset-type.entity-CHXkbEHG.mjs.map} +1 -1
  165. package/fesm2022/{acorex-modules-maintenance-management-failure-mode-mechanism.entity-nxOdHZxu.mjs → acorex-modules-maintenance-management-failure-mode-mechanism.entity-yR11e9TU.mjs} +2 -2
  166. package/fesm2022/{acorex-modules-maintenance-management-failure-mode-mechanism.entity-nxOdHZxu.mjs.map → acorex-modules-maintenance-management-failure-mode-mechanism.entity-yR11e9TU.mjs.map} +1 -1
  167. package/fesm2022/{acorex-modules-maintenance-management-failure-mode-solution.entity-ApD80Scc.mjs → acorex-modules-maintenance-management-failure-mode-solution.entity-BD4Uz6G-.mjs} +2 -2
  168. package/fesm2022/{acorex-modules-maintenance-management-failure-mode-solution.entity-ApD80Scc.mjs.map → acorex-modules-maintenance-management-failure-mode-solution.entity-BD4Uz6G-.mjs.map} +1 -1
  169. package/fesm2022/{acorex-modules-maintenance-management-failure-register-cause.entity-CibfwJLG.mjs → acorex-modules-maintenance-management-failure-register-cause.entity-CZFgl-t4.mjs} +2 -2
  170. package/fesm2022/{acorex-modules-maintenance-management-failure-register-cause.entity-CibfwJLG.mjs.map → acorex-modules-maintenance-management-failure-register-cause.entity-CZFgl-t4.mjs.map} +1 -1
  171. package/fesm2022/{acorex-modules-maintenance-management-failure-register-effect.entity-DpoqULBf.mjs → acorex-modules-maintenance-management-failure-register-effect.entity-DQE5nqiN.mjs} +2 -2
  172. package/fesm2022/{acorex-modules-maintenance-management-failure-register-effect.entity-DpoqULBf.mjs.map → acorex-modules-maintenance-management-failure-register-effect.entity-DQE5nqiN.mjs.map} +1 -1
  173. package/fesm2022/{acorex-modules-maintenance-management-failure-register-mechanism.entity-0-J2Hkmn.mjs → acorex-modules-maintenance-management-failure-register-mechanism.entity-C6mhbWzU.mjs} +2 -2
  174. package/fesm2022/{acorex-modules-maintenance-management-failure-register-mechanism.entity-0-J2Hkmn.mjs.map → acorex-modules-maintenance-management-failure-register-mechanism.entity-C6mhbWzU.mjs.map} +1 -1
  175. package/fesm2022/{acorex-modules-maintenance-management-failure-register.entity-C4Az4Rr9.mjs → acorex-modules-maintenance-management-failure-register.entity-DSnrVaWI.mjs} +2 -2
  176. package/fesm2022/{acorex-modules-maintenance-management-failure-register.entity-C4Az4Rr9.mjs.map → acorex-modules-maintenance-management-failure-register.entity-DSnrVaWI.mjs.map} +1 -1
  177. package/fesm2022/{acorex-modules-maintenance-management-failure-severity.entity-BZo6UUun.mjs → acorex-modules-maintenance-management-failure-severity.entity-DZoMhgW7.mjs} +2 -2
  178. package/fesm2022/{acorex-modules-maintenance-management-failure-severity.entity-BZo6UUun.mjs.map → acorex-modules-maintenance-management-failure-severity.entity-DZoMhgW7.mjs.map} +1 -1
  179. package/fesm2022/{acorex-modules-maintenance-management-maintenance-template.entity-DxYY0hpG.mjs → acorex-modules-maintenance-management-maintenance-template.entity-qf2WNKB_.mjs} +2 -2
  180. package/fesm2022/{acorex-modules-maintenance-management-maintenance-template.entity-DxYY0hpG.mjs.map → acorex-modules-maintenance-management-maintenance-template.entity-qf2WNKB_.mjs.map} +1 -1
  181. package/fesm2022/acorex-modules-maintenance-management.mjs +1 -1
  182. package/fesm2022/{acorex-modules-notification-management-notification-page.component-D0we6H1f.mjs → acorex-modules-notification-management-notification-page.component-B017YY1H.mjs} +2 -2
  183. package/fesm2022/{acorex-modules-notification-management-notification-page.component-D0we6H1f.mjs.map → acorex-modules-notification-management-notification-page.component-B017YY1H.mjs.map} +1 -1
  184. package/fesm2022/acorex-modules-notification-management.mjs +369 -45
  185. package/fesm2022/acorex-modules-notification-management.mjs.map +1 -1
  186. package/fesm2022/{acorex-modules-order-management-settings.provider-BzNJIZCu.mjs → acorex-modules-order-management-settings.provider-DF8JQ1PZ.mjs} +6 -11
  187. package/fesm2022/acorex-modules-order-management-settings.provider-DF8JQ1PZ.mjs.map +1 -0
  188. package/fesm2022/acorex-modules-order-management.mjs +2 -2
  189. package/fesm2022/{acorex-modules-organization-management-acorex-modules-organization-management-Bu8fRj_5.mjs → acorex-modules-organization-management-acorex-modules-organization-management-Dqhk5reQ.mjs} +479 -89
  190. package/fesm2022/acorex-modules-organization-management-acorex-modules-organization-management-Dqhk5reQ.mjs.map +1 -0
  191. package/fesm2022/acorex-modules-organization-management-add-business-unit-to-business-unit.command-pnxqURIQ.mjs +165 -0
  192. package/fesm2022/acorex-modules-organization-management-add-business-unit-to-business-unit.command-pnxqURIQ.mjs.map +1 -0
  193. package/fesm2022/{acorex-modules-organization-management-add-position-to-business-unit.command-Qej_boIY.mjs → acorex-modules-organization-management-add-position-to-business-unit.command-DbHKd1Nd.mjs} +32 -2
  194. package/fesm2022/acorex-modules-organization-management-add-position-to-business-unit.command-DbHKd1Nd.mjs.map +1 -0
  195. package/fesm2022/{acorex-modules-organization-management-business-unit.entity-BfQ_7JAq.mjs → acorex-modules-organization-management-business-unit.entity-FsF290Im.mjs} +38 -5
  196. package/fesm2022/acorex-modules-organization-management-business-unit.entity-FsF290Im.mjs.map +1 -0
  197. package/fesm2022/{acorex-modules-organization-management-chart.entity-CNQGGfHV.mjs → acorex-modules-organization-management-chart.entity-_OJkO2zX.mjs} +2 -2
  198. package/fesm2022/{acorex-modules-organization-management-chart.entity-CNQGGfHV.mjs.map → acorex-modules-organization-management-chart.entity-_OJkO2zX.mjs.map} +1 -1
  199. package/fesm2022/{acorex-modules-organization-management-company.entity-D_nTKLzu.mjs → acorex-modules-organization-management-company.entity-Dw7_BvxV.mjs} +2 -2
  200. package/fesm2022/{acorex-modules-organization-management-company.entity-D_nTKLzu.mjs.map → acorex-modules-organization-management-company.entity-Dw7_BvxV.mjs.map} +1 -1
  201. package/fesm2022/{acorex-modules-organization-management-entity.provider-B4uYixLQ.mjs → acorex-modules-organization-management-entity.provider-BWw2RN_V.mjs} +15 -15
  202. package/fesm2022/{acorex-modules-organization-management-entity.provider-B4uYixLQ.mjs.map → acorex-modules-organization-management-entity.provider-BWw2RN_V.mjs.map} +1 -1
  203. package/fesm2022/{acorex-modules-organization-management-feature-definition.provider-COjc6knz.mjs → acorex-modules-organization-management-feature-definition.provider-D3WYwpy0.mjs} +2 -2
  204. package/fesm2022/{acorex-modules-organization-management-feature-definition.provider-COjc6knz.mjs.map → acorex-modules-organization-management-feature-definition.provider-D3WYwpy0.mjs.map} +1 -1
  205. package/fesm2022/{acorex-modules-organization-management-job-definition-pages-component.provider-gDpII9TZ.mjs → acorex-modules-organization-management-job-definition-pages-component.provider-CnS_nu1v.mjs} +3 -3
  206. package/fesm2022/{acorex-modules-organization-management-job-definition-pages-component.provider-gDpII9TZ.mjs.map → acorex-modules-organization-management-job-definition-pages-component.provider-CnS_nu1v.mjs.map} +1 -1
  207. package/fesm2022/{acorex-modules-organization-management-job-definition-responsibilities-page.component-CjXV4wrM.mjs → acorex-modules-organization-management-job-definition-responsibilities-page.component-ZTopEh2M.mjs} +3 -3
  208. package/fesm2022/{acorex-modules-organization-management-job-definition-responsibilities-page.component-CjXV4wrM.mjs.map → acorex-modules-organization-management-job-definition-responsibilities-page.component-ZTopEh2M.mjs.map} +1 -1
  209. package/fesm2022/{acorex-modules-organization-management-job-definition-skills-page.component-2XBgMms-.mjs → acorex-modules-organization-management-job-definition-skills-page.component-Yyzwqg0v.mjs} +2 -2
  210. package/fesm2022/{acorex-modules-organization-management-job-definition-skills-page.component-2XBgMms-.mjs.map → acorex-modules-organization-management-job-definition-skills-page.component-Yyzwqg0v.mjs.map} +1 -1
  211. package/fesm2022/{acorex-modules-organization-management-job-definition.entity-f0JnkdjP.mjs → acorex-modules-organization-management-job-definition.entity-DJjmv1hf.mjs} +2 -2
  212. package/fesm2022/{acorex-modules-organization-management-job-definition.entity-f0JnkdjP.mjs.map → acorex-modules-organization-management-job-definition.entity-DJjmv1hf.mjs.map} +1 -1
  213. package/fesm2022/{acorex-modules-organization-management-job-level.datasource-ByHluGvc.mjs → acorex-modules-organization-management-job-level.datasource-DJH3zaNN.mjs} +2 -2
  214. package/fesm2022/{acorex-modules-organization-management-job-level.datasource-ByHluGvc.mjs.map → acorex-modules-organization-management-job-level.datasource-DJH3zaNN.mjs.map} +1 -1
  215. package/fesm2022/{acorex-modules-organization-management-job-level.entity-BJJJQxCp.mjs → acorex-modules-organization-management-job-level.entity-DBEFEBzu.mjs} +2 -2
  216. package/fesm2022/{acorex-modules-organization-management-job-level.entity-BJJJQxCp.mjs.map → acorex-modules-organization-management-job-level.entity-DBEFEBzu.mjs.map} +1 -1
  217. package/fesm2022/{acorex-modules-organization-management-menu.provider-Dd_Z58sY.mjs → acorex-modules-organization-management-menu.provider-yGn338K1.mjs} +2 -2
  218. package/fesm2022/{acorex-modules-organization-management-menu.provider-Dd_Z58sY.mjs.map → acorex-modules-organization-management-menu.provider-yGn338K1.mjs.map} +1 -1
  219. package/fesm2022/{acorex-modules-organization-management-org-chart.page-fudrNddI.mjs → acorex-modules-organization-management-org-chart.page-C1J123cl.mjs} +35 -48
  220. package/fesm2022/acorex-modules-organization-management-org-chart.page-C1J123cl.mjs.map +1 -0
  221. package/fesm2022/{acorex-modules-organization-management-permission-definition.provider-CoB_RGSa.mjs → acorex-modules-organization-management-permission-definition.provider-B1f668X4.mjs} +2 -2
  222. package/fesm2022/{acorex-modules-organization-management-permission-definition.provider-CoB_RGSa.mjs.map → acorex-modules-organization-management-permission-definition.provider-B1f668X4.mjs.map} +1 -1
  223. package/fesm2022/{acorex-modules-organization-management-position.entity-T1DY1fZn.mjs → acorex-modules-organization-management-position.entity-BvSjM5Hs.mjs} +6 -2
  224. package/fesm2022/acorex-modules-organization-management-position.entity-BvSjM5Hs.mjs.map +1 -0
  225. package/fesm2022/acorex-modules-organization-management-remove-position-from-business-unit.command-CPdbVSno.mjs +92 -0
  226. package/fesm2022/acorex-modules-organization-management-remove-position-from-business-unit.command-CPdbVSno.mjs.map +1 -0
  227. package/fesm2022/acorex-modules-organization-management-replace-position-assignee.command-CQRcVN6R.mjs +66 -0
  228. package/fesm2022/acorex-modules-organization-management-replace-position-assignee.command-CQRcVN6R.mjs.map +1 -0
  229. package/fesm2022/{acorex-modules-organization-management-responsibilities-matrix-widget-edit.component-CIPzMi3d.mjs → acorex-modules-organization-management-responsibilities-matrix-widget-edit.component-Ce3T04Qb.mjs} +2 -2
  230. package/fesm2022/{acorex-modules-organization-management-responsibilities-matrix-widget-edit.component-CIPzMi3d.mjs.map → acorex-modules-organization-management-responsibilities-matrix-widget-edit.component-Ce3T04Qb.mjs.map} +1 -1
  231. package/fesm2022/{acorex-modules-organization-management-responsibilities-matrix-widget-view.component-DzdTNVP6.mjs → acorex-modules-organization-management-responsibilities-matrix-widget-view.component-CIr7JDX-.mjs} +2 -2
  232. package/fesm2022/{acorex-modules-organization-management-responsibilities-matrix-widget-view.component-DzdTNVP6.mjs.map → acorex-modules-organization-management-responsibilities-matrix-widget-view.component-CIr7JDX-.mjs.map} +1 -1
  233. package/fesm2022/{acorex-modules-organization-management-responsibilities-matrix.component-C850Dz47.mjs → acorex-modules-organization-management-responsibilities-matrix.component-BXWso7Ga.mjs} +2 -2
  234. package/fesm2022/{acorex-modules-organization-management-responsibilities-matrix.component-C850Dz47.mjs.map → acorex-modules-organization-management-responsibilities-matrix.component-BXWso7Ga.mjs.map} +1 -1
  235. package/fesm2022/{acorex-modules-organization-management-responsibility-level.entity-CVxWva5x.mjs → acorex-modules-organization-management-responsibility-level.entity-DB04XTJ8.mjs} +2 -2
  236. package/fesm2022/{acorex-modules-organization-management-responsibility-level.entity-CVxWva5x.mjs.map → acorex-modules-organization-management-responsibility-level.entity-DB04XTJ8.mjs.map} +1 -1
  237. package/fesm2022/{acorex-modules-organization-management-responsibility.entity-BmDZhqNl.mjs → acorex-modules-organization-management-responsibility.entity-BMqhYqJS.mjs} +2 -2
  238. package/fesm2022/{acorex-modules-organization-management-responsibility.entity-BmDZhqNl.mjs.map → acorex-modules-organization-management-responsibility.entity-BMqhYqJS.mjs.map} +1 -1
  239. package/fesm2022/{acorex-modules-organization-management-settings.provider-wwGKyBrV.mjs → acorex-modules-organization-management-settings.provider-BhIJkbq_.mjs} +21 -24
  240. package/fesm2022/acorex-modules-organization-management-settings.provider-BhIJkbq_.mjs.map +1 -0
  241. package/fesm2022/{acorex-modules-organization-management-team-business-unit.entity-BmXLb4RI.mjs → acorex-modules-organization-management-team-business-unit.entity-DkTtZv7y.mjs} +2 -2
  242. package/fesm2022/{acorex-modules-organization-management-team-business-unit.entity-BmXLb4RI.mjs.map → acorex-modules-organization-management-team-business-unit.entity-DkTtZv7y.mjs.map} +1 -1
  243. package/fesm2022/{acorex-modules-organization-management-team-member-role.entity-C4DGSm2r.mjs → acorex-modules-organization-management-team-member-role.entity-DPqEPpkP.mjs} +2 -2
  244. package/fesm2022/{acorex-modules-organization-management-team-member-role.entity-C4DGSm2r.mjs.map → acorex-modules-organization-management-team-member-role.entity-DPqEPpkP.mjs.map} +1 -1
  245. package/fesm2022/{acorex-modules-organization-management-team-member.entity-CvVHEzIU.mjs → acorex-modules-organization-management-team-member.entity-IN-CPv5W.mjs} +2 -2
  246. package/fesm2022/{acorex-modules-organization-management-team-member.entity-CvVHEzIU.mjs.map → acorex-modules-organization-management-team-member.entity-IN-CPv5W.mjs.map} +1 -1
  247. package/fesm2022/{acorex-modules-organization-management-team.entity-urjULfNp.mjs → acorex-modules-organization-management-team.entity-D7B8ulFX.mjs} +3 -2
  248. package/fesm2022/acorex-modules-organization-management-team.entity-D7B8ulFX.mjs.map +1 -0
  249. package/fesm2022/acorex-modules-organization-management.mjs +1 -1
  250. package/fesm2022/acorex-modules-person-core-gender.entity-DQVC2nR1.mjs +121 -0
  251. package/fesm2022/acorex-modules-person-core-gender.entity-DQVC2nR1.mjs.map +1 -0
  252. package/fesm2022/acorex-modules-person-core-marital-status.entity-Bcrni-xU.mjs +121 -0
  253. package/fesm2022/acorex-modules-person-core-marital-status.entity-Bcrni-xU.mjs.map +1 -0
  254. package/fesm2022/acorex-modules-person-core-person-title.entity-h53llLF9.mjs +121 -0
  255. package/fesm2022/acorex-modules-person-core-person-title.entity-h53llLF9.mjs.map +1 -0
  256. package/fesm2022/acorex-modules-person-core.mjs +151 -295
  257. package/fesm2022/acorex-modules-person-core.mjs.map +1 -1
  258. package/fesm2022/{acorex-modules-platform-dev-tools-settings.provider-CGyf-4eq.mjs → acorex-modules-platform-dev-tools-settings.provider-DKmgBUYt.mjs} +2 -2
  259. package/fesm2022/acorex-modules-platform-dev-tools-settings.provider-DKmgBUYt.mjs.map +1 -0
  260. package/fesm2022/acorex-modules-platform-dev-tools.mjs +2 -2
  261. package/fesm2022/{acorex-modules-platform-management-acorex-modules-platform-management-CZMqG3Eq.mjs → acorex-modules-platform-management-acorex-modules-platform-management-DkOzj2Oy.mjs} +12 -4
  262. package/fesm2022/acorex-modules-platform-management-acorex-modules-platform-management-DkOzj2Oy.mjs.map +1 -0
  263. package/fesm2022/acorex-modules-platform-management-entity-master-actions-for-ai.util-OCk5eqQz.mjs +56 -0
  264. package/fesm2022/acorex-modules-platform-management-entity-master-actions-for-ai.util-OCk5eqQz.mjs.map +1 -0
  265. package/fesm2022/acorex-modules-platform-management-list-platform-navigation-for-ai.query-C3-eBMwF.mjs +198 -0
  266. package/fesm2022/acorex-modules-platform-management-list-platform-navigation-for-ai.query-C3-eBMwF.mjs.map +1 -0
  267. package/fesm2022/{acorex-modules-platform-management-list-registered-entities.query-B6-zV_Ml.mjs → acorex-modules-platform-management-list-registered-entities.query-BZVD9YPU.mjs} +26 -4
  268. package/fesm2022/acorex-modules-platform-management-list-registered-entities.query-BZVD9YPU.mjs.map +1 -0
  269. package/fesm2022/{acorex-modules-platform-management-menu-list.component-BRA7Q50z.mjs → acorex-modules-platform-management-menu-list.component-agWZWchQ.mjs} +3 -3
  270. package/fesm2022/{acorex-modules-platform-management-menu-list.component-BRA7Q50z.mjs.map → acorex-modules-platform-management-menu-list.component-agWZWchQ.mjs.map} +1 -1
  271. package/fesm2022/acorex-modules-platform-management.mjs +1 -1
  272. package/fesm2022/{acorex-modules-report-management-report-runner-root-page.component-BjKrHoBg.mjs → acorex-modules-report-management-report-runner-root-page.component-B-NoGoOJ.mjs} +2 -2
  273. package/fesm2022/{acorex-modules-report-management-report-runner-root-page.component-BjKrHoBg.mjs.map → acorex-modules-report-management-report-runner-root-page.component-B-NoGoOJ.mjs.map} +1 -1
  274. package/fesm2022/acorex-modules-report-management.mjs +7 -7
  275. package/fesm2022/acorex-modules-report-management.mjs.map +1 -1
  276. package/fesm2022/acorex-modules-security-management.mjs +1 -1
  277. package/fesm2022/acorex-modules-security-management.mjs.map +1 -1
  278. package/fesm2022/{acorex-modules-settings-management-acorex-modules-settings-management-BaDnebTm.mjs → acorex-modules-settings-management-acorex-modules-settings-management-oArHHeSx.mjs} +88 -13
  279. package/fesm2022/acorex-modules-settings-management-acorex-modules-settings-management-oArHHeSx.mjs.map +1 -0
  280. package/fesm2022/{acorex-modules-settings-management-permission-definition.provider-cuuhKUJ1.mjs → acorex-modules-settings-management-permission-definition.provider-BsFyZ-gS.mjs} +2 -2
  281. package/fesm2022/{acorex-modules-settings-management-permission-definition.provider-cuuhKUJ1.mjs.map → acorex-modules-settings-management-permission-definition.provider-BsFyZ-gS.mjs.map} +1 -1
  282. package/fesm2022/{acorex-modules-settings-management-setting-page.component-CWIs93_1.mjs → acorex-modules-settings-management-setting-page.component-BftWms4f.mjs} +5 -4
  283. package/fesm2022/acorex-modules-settings-management-setting-page.component-BftWms4f.mjs.map +1 -0
  284. package/fesm2022/{acorex-modules-settings-management-setting-view.component-BTexlmU1.mjs → acorex-modules-settings-management-setting-view.component-paKdiSEr.mjs} +2 -2
  285. package/fesm2022/{acorex-modules-settings-management-setting-view.component-BTexlmU1.mjs.map → acorex-modules-settings-management-setting-view.component-paKdiSEr.mjs.map} +1 -1
  286. package/fesm2022/acorex-modules-settings-management.mjs +1 -1
  287. package/fesm2022/{acorex-modules-task-management-acorex-modules-task-management-it-Lf0L_.mjs → acorex-modules-task-management-acorex-modules-task-management-CWlgXg_u.mjs} +26 -29
  288. package/fesm2022/acorex-modules-task-management-acorex-modules-task-management-CWlgXg_u.mjs.map +1 -0
  289. package/fesm2022/{acorex-modules-task-management-task-board.page-DF4XWz_0.mjs → acorex-modules-task-management-task-board.page-Bxpga0DN.mjs} +3 -3
  290. package/fesm2022/{acorex-modules-task-management-task-board.page-DF4XWz_0.mjs.map → acorex-modules-task-management-task-board.page-Bxpga0DN.mjs.map} +1 -1
  291. package/fesm2022/acorex-modules-task-management.mjs +1 -1
  292. package/fesm2022/acorex-modules-tenant-management.mjs +3 -7
  293. package/fesm2022/acorex-modules-tenant-management.mjs.map +1 -1
  294. package/fesm2022/acorex-modules-workflow-management.mjs +0 -7
  295. package/fesm2022/acorex-modules-workflow-management.mjs.map +1 -1
  296. package/organization-management/README.md +1 -1
  297. package/package.json +2 -2
  298. package/platform-management/README.md +4 -0
  299. package/types/acorex-modules-ai-management.d.ts +150 -527
  300. package/types/acorex-modules-application-management.d.ts +5 -2
  301. package/types/acorex-modules-asset-management.d.ts +19 -87
  302. package/types/acorex-modules-common.d.ts +3 -6
  303. package/types/acorex-modules-content-management.d.ts +22 -5
  304. package/types/acorex-modules-conversation.d.ts +60 -4
  305. package/types/acorex-modules-document-management.d.ts +53 -22
  306. package/types/acorex-modules-human-capital-management.d.ts +15 -10
  307. package/types/acorex-modules-location-management.d.ts +9 -1
  308. package/types/acorex-modules-maintenance-management.d.ts +0 -2
  309. package/types/acorex-modules-notification-management.d.ts +68 -6
  310. package/types/acorex-modules-organization-management.d.ts +46 -4
  311. package/types/acorex-modules-person-core.d.ts +61 -4
  312. package/types/acorex-modules-settings-management.d.ts +3 -0
  313. package/types/acorex-modules-task-management.d.ts +0 -1
  314. package/types/acorex-modules-tenant-management.d.ts +0 -1
  315. package/fesm2022/acorex-modules-ai-management-acorex-modules-ai-management-D7_4LOGV.mjs +0 -8666
  316. package/fesm2022/acorex-modules-ai-management-acorex-modules-ai-management-D7_4LOGV.mjs.map +0 -1
  317. package/fesm2022/acorex-modules-ai-management-agent-registry-tool-configurator-widget-edit.component-C7TQMwX4.mjs.map +0 -1
  318. package/fesm2022/acorex-modules-ai-management-agent.entity-DwPIKib2.mjs.map +0 -1
  319. package/fesm2022/acorex-modules-ai-management-ai-delegated-agent-transcript-popup.component-D2GJ5qD1.mjs +0 -1254
  320. package/fesm2022/acorex-modules-ai-management-ai-delegated-agent-transcript-popup.component-D2GJ5qD1.mjs.map +0 -1
  321. package/fesm2022/acorex-modules-ai-management-assist-delegated-agent-configurator-widget-edit.component-BozVAuLO.mjs.map +0 -1
  322. package/fesm2022/acorex-modules-ai-management-index-DaGJVOFw.mjs +0 -2
  323. package/fesm2022/acorex-modules-ai-management-index-DaGJVOFw.mjs.map +0 -1
  324. package/fesm2022/acorex-modules-asset-management-acorex-modules-asset-management-DrIhRaZ6.mjs.map +0 -1
  325. package/fesm2022/acorex-modules-asset-management-asset-rental-history.entity-95NBXoex.mjs +0 -302
  326. package/fesm2022/acorex-modules-asset-management-asset-rental-history.entity-95NBXoex.mjs.map +0 -1
  327. package/fesm2022/acorex-modules-asset-management-asset-state-history.entity-C-z103la.mjs +0 -258
  328. package/fesm2022/acorex-modules-asset-management-asset-state-history.entity-C-z103la.mjs.map +0 -1
  329. package/fesm2022/acorex-modules-asset-management-asset-status.rules-B7KwWQEe.mjs +0 -98
  330. package/fesm2022/acorex-modules-asset-management-asset-status.rules-B7KwWQEe.mjs.map +0 -1
  331. package/fesm2022/acorex-modules-asset-management-asset-type-section-component.entity-n-bxBcGz.mjs.map +0 -1
  332. package/fesm2022/acorex-modules-asset-management-asset-type.entity-Dt61Rs4F.mjs.map +0 -1
  333. package/fesm2022/acorex-modules-asset-management-asset.entity-BzlsaEwC.mjs.map +0 -1
  334. package/fesm2022/acorex-modules-asset-management-assetLifecycle-state.provider-DZ5r2zx7.mjs +0 -192
  335. package/fesm2022/acorex-modules-asset-management-assetLifecycle-state.provider-DZ5r2zx7.mjs.map +0 -1
  336. package/fesm2022/acorex-modules-asset-management-status.provider-C41t4e2U.mjs +0 -363
  337. package/fesm2022/acorex-modules-asset-management-status.provider-C41t4e2U.mjs.map +0 -1
  338. package/fesm2022/acorex-modules-auth-settings.provider-DkhbuDBO.mjs.map +0 -1
  339. package/fesm2022/acorex-modules-content-management-acorex-modules-content-management-of3UnjxP.mjs.map +0 -1
  340. package/fesm2022/acorex-modules-content-management-template-content-editor-widget-edit.component-BKHvQiql.mjs.map +0 -1
  341. package/fesm2022/acorex-modules-content-management-template-content-editor-widget-view.component-q1Se62Hd.mjs.map +0 -1
  342. package/fesm2022/acorex-modules-dashboard-management-acorex-modules-dashboard-management-DLndkp6w.mjs.map +0 -1
  343. package/fesm2022/acorex-modules-document-management-large-tiles-view.component-CSHUgcLx.mjs +0 -24
  344. package/fesm2022/acorex-modules-document-management-large-tiles-view.component-CSHUgcLx.mjs.map +0 -1
  345. package/fesm2022/acorex-modules-document-management-small-tiles-view.component-BQSgUw6o.mjs +0 -24
  346. package/fesm2022/acorex-modules-document-management-small-tiles-view.component-BQSgUw6o.mjs.map +0 -1
  347. package/fesm2022/acorex-modules-human-capital-management-acorex-modules-human-capital-management-Bgsi3FHG.mjs.map +0 -1
  348. package/fesm2022/acorex-modules-human-capital-management-employee.entity-4k7F7_ON.mjs.map +0 -1
  349. package/fesm2022/acorex-modules-human-capital-management-revoke-position-assignment.command-CYzqQXja.mjs.map +0 -1
  350. package/fesm2022/acorex-modules-maintenance-management-acorex-modules-maintenance-management-B5wf4zMI.mjs.map +0 -1
  351. package/fesm2022/acorex-modules-order-management-settings.provider-BzNJIZCu.mjs.map +0 -1
  352. package/fesm2022/acorex-modules-organization-management-acorex-modules-organization-management-Bu8fRj_5.mjs.map +0 -1
  353. package/fesm2022/acorex-modules-organization-management-add-position-to-business-unit.command-Qej_boIY.mjs.map +0 -1
  354. package/fesm2022/acorex-modules-organization-management-business-unit.entity-BfQ_7JAq.mjs.map +0 -1
  355. package/fesm2022/acorex-modules-organization-management-org-chart.page-fudrNddI.mjs.map +0 -1
  356. package/fesm2022/acorex-modules-organization-management-position.entity-T1DY1fZn.mjs.map +0 -1
  357. package/fesm2022/acorex-modules-organization-management-settings.provider-wwGKyBrV.mjs.map +0 -1
  358. package/fesm2022/acorex-modules-organization-management-team.entity-urjULfNp.mjs.map +0 -1
  359. package/fesm2022/acorex-modules-platform-dev-tools-settings.provider-CGyf-4eq.mjs.map +0 -1
  360. package/fesm2022/acorex-modules-platform-management-acorex-modules-platform-management-CZMqG3Eq.mjs.map +0 -1
  361. package/fesm2022/acorex-modules-platform-management-list-registered-entities.query-B6-zV_Ml.mjs.map +0 -1
  362. package/fesm2022/acorex-modules-settings-management-acorex-modules-settings-management-BaDnebTm.mjs.map +0 -1
  363. package/fesm2022/acorex-modules-settings-management-setting-page.component-CWIs93_1.mjs.map +0 -1
  364. package/fesm2022/acorex-modules-task-management-acorex-modules-task-management-it-Lf0L_.mjs.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"acorex-modules-ai-management-acorex-modules-ai-management-D7_4LOGV.mjs","sources":["../../../../libs/modules/ai-management/src/lib/const.ts","../../../../libs/modules/ai-management/src/lib/manifest.ts","../../../../libs/modules/ai-management/src/lib/entity.provider.ts","../../../../libs/modules/ai-management/src/lib/menu.keys.ts","../../../../libs/modules/ai-management/src/lib/menu.provider.ts","../../../../libs/modules/ai-management/src/lib/settings.keys.ts","../../../../libs/modules/ai-management/src/lib/settings.provider.ts","../../../../libs/modules/ai-management/src/lib/datasources/ai-agent-catalog.datasource.ts","../../../../libs/modules/ai-management/src/lib/datasources/ai-registry-catalog.datasource.ts","../../../../libs/modules/ai-management/src/lib/datasources/ai-model-catalog.datasource.ts","../../../../libs/modules/ai-management/src/lib/tags/ai-model-purpose-tag.provider.ts","../../../../libs/modules/ai-management/src/lib/features/ai-assist.abstract.ts","../../../../libs/modules/ai-management/src/lib/ai-assist.types.ts","../../../../libs/modules/ai-management/src/lib/features/ai-engine.ts","../../../../libs/modules/ai-management/src/lib/features/ai-engine.types.ts","../../../../libs/modules/ai-management/src/lib/features/ai-platform-runtime-context.builder.ts","../../../../libs/modules/ai-management/src/lib/features/image/ai-generated-image-persist.ts","../../../../libs/modules/ai-management/src/lib/features/assist/ai-chat-composer-media.helpers.ts","../../../../libs/modules/ai-management/src/lib/features/assist/ai-assist-prompt-bottom-panel/ai-assist-prompt-bottom-panel.component.ts","../../../../libs/modules/ai-management/src/lib/features/assist/ai-assist-prompt-bottom-panel/ai-assist-prompt-bottom-panel.component.html","../../../../libs/modules/ai-management/src/lib/features/assist/ai-assist-prompt-bottom-panel.service.ts","../../../../libs/modules/ai-management/src/lib/features/assist/structured-output/extract-last-assistant-plain-text.ts","../../../../libs/modules/ai-management/src/lib/features/assist/structured-output/build-structured-output-retry-user-text.ts","../../../../libs/modules/ai-management/src/lib/features/assist/structured-output/parse-structured-assistant-text.ts","../../../../libs/modules/ai-management/src/lib/features/assist/structured-output/repair-structured-assistant-parse.ts","../../../../libs/modules/ai-management/src/lib/features/assist/structured-output/validate-structured-assistant-response.ts","../../../../libs/modules/ai-management/src/lib/features/assist/structured-output/run-structured-output-pipeline.ts","../../../../libs/modules/ai-management/src/lib/features/ai-manager.service.ts","../../../../libs/modules/ai-management/src/lib/features/agent-registry-tool-configurator/agent-registry-tool-configurator-widget.config.ts","../../../../libs/modules/ai-management/src/lib/features/assist-delegated-agent-configurator/assist-delegated-agent-configurator-widget.config.ts","../../../../libs/modules/ai-management/src/lib/widget-definition.provider.ts","../../../../libs/modules/ai-management/src/lib/ai-management.module.ts","../../../../libs/modules/ai-management/src/lib/utils/ai-delegated-agent-prompt-preview.util.ts","../../../../libs/modules/ai-management/src/lib/utils/ai-tool-command-args-normalize.ts","../../../../libs/modules/ai-management/src/lib/utils/assist-initial-messages.util.ts","../../../../libs/modules/ai-management/src/lib/tools/chat-generate-image.command.definition.ts","../../../../libs/modules/ai-management/src/lib/tools/chat-transcribe-speech.command.definition.ts","../../../../libs/modules/ai-management/src/lib/tools/chat-synthesize-speech.command.definition.ts","../../../../libs/modules/ai-management/src/lib/tools/extract-document-text.command.definition.ts","../../../../libs/modules/ai-management/src/lib/tools/structured-text-completion.command.definition.ts","../../../../libs/modules/ai-management/src/lib/tools/ai-chat-tool.command-keys.ts","../../../../libs/modules/ai-management/src/lib/tools/ai-chat-tool-run-context.service.ts","../../../../libs/modules/ai-management/src/lib/tools/ai-chat-tool.llm-parameters.ts","../../../../libs/modules/ai-management/src/lib/features/ai-assist-chat-model-catalog.service.ts","../../../../libs/modules/ai-management/src/lib/features/chat/ai-chat-thinking.util.ts","../../../../libs/modules/ai-management/src/lib/features/chat/ai-chat-display-items.build.ts","../../../../libs/modules/ai-management/src/lib/features/chat/ai-chat-tool-audio-preview.component.ts","../../../../libs/modules/ai-management/src/lib/features/chat/ai-chat-tool-image-preview.component.ts","../../../../libs/modules/ai-management/src/lib/features/chat/ai-chat-tool-execute.service.ts","../../../../libs/modules/ai-management/src/lib/features/chat/ai-chat-page.component.ts","../../../../libs/modules/ai-management/src/lib/features/assist/ai-assist-prompt-popup.component.ts","../../../../libs/modules/ai-management/src/acorex-modules-ai-management.ts"],"sourcesContent":["//#region ---- Module Config ----\n\nconst config = {\n i18n: 'ai-management',\n module: 'AiManagement',\n route: 'ai-management',\n};\n\nexport const RootConfig = {\n config,\n module: {\n name: config.module,\n route: config.route,\n title: `@${config.i18n}:module.title`,\n icon: 'fa-light fa-robot',\n },\n entities: {\n model: {\n name: 'AiModel',\n fullName: `${config.module}.AiModel`,\n title: '@ai-management:models.entities.model.title',\n titlePlural: '@ai-management:models.entities.model.plural',\n icon: 'fa-light fa-microchip',\n },\n assist: {\n name: 'Assist',\n fullName: `${config.module}.Assist`,\n title: '@ai-management:assists.entities.assist.title',\n titlePlural: '@ai-management:assists.entities.assist.plural',\n icon: 'fa-light fa-user-robot',\n },\n agent: {\n name: 'AiAgent',\n fullName: `${config.module}.AiAgent`,\n title: '@ai-management:agents.entities.agent.title',\n titlePlural: '@ai-management:agents.entities.agent.plural',\n icon: 'fa-light fa-people-group',\n },\n openAiEndpoint: {\n name: 'OpenAiEndpoint',\n fullName: `${config.module}.OpenAiEndpoint`,\n title: '@ai-management:open-ai-endpoints.entities.endpoint.title',\n titlePlural: '@ai-management:open-ai-endpoints.entities.endpoint.plural',\n icon: 'fa-light fa-plug',\n },\n },\n};\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { AXPModuleManifest } from '@acorex/platform/core';\nimport { RootConfig } from './const';\n\n//#endregion\n\n//#region ---- Manifest Definition ----\n\n/**\n * AI Management Module Manifest.\n * Defines module metadata for AI provider and API key management.\n */\nexport const AiManagementManifest: AXPModuleManifest = {\n name: RootConfig.module.name,\n version: '1.0.0',\n title: RootConfig.module.title,\n icon: RootConfig.module.icon,\n i18n: RootConfig.config.i18n,\n dependencies: [],\n};\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { AXPEntity } from '@acorex/platform/common';\nimport { AXPEntityDefinitionLoader, AXPEntityPreloadEntity } from '@acorex/platform/layout/entity';\nimport { Injectable } from '@angular/core';\nimport { RootConfig } from './const';\n\n//#endregion\n\n//#region ---- Entity Provider ----\n\n@Injectable()\nexport class AXMAiManagementEntityProvider implements AXPEntityDefinitionLoader {\n preload(): AXPEntityPreloadEntity[] {\n const module = RootConfig.module.name;\n return Object.values(RootConfig.entities).map((entity: { name: string }) => ({\n module,\n entity: entity.name,\n }));\n }\n\n async get(moduleName: string, entityName: string): Promise<AXPEntity | null> {\n if (moduleName !== RootConfig.module.name) return null;\n switch (entityName) {\n case RootConfig.entities.model.name:\n return (await import('./entities/model/model.entity')).factory();\n case RootConfig.entities.assist.name:\n return (await import('./entities/assist/assist.entity')).assistFactory();\n case RootConfig.entities.agent.name:\n return (await import('./entities/agent/agent.entity')).agentFactory();\n case RootConfig.entities.openAiEndpoint.name:\n return (await import('./entities/open-ai-endpoint/open-ai-endpoint.entity')).openAiEndpointFactory();\n default:\n return null;\n }\n }\n\n async list(): Promise<{ name: string; module: string }[]> {\n const m = RootConfig.module.name;\n return Promise.resolve(\n Object.values(RootConfig.entities).map((e) => ({ name: e.name, module: m }))\n );\n }\n}\n\n//#endregion\n","//#region ---- Menu Keys ----\n\n/**\n * AI Management menu keys.\n * Pattern: AiManagement:Menu:{Path}\n */\nexport const AXPAiManagementMenuKeys = {\n /** OpenAI-compatible HTTP endpoints (base URL + API key). */\n OpenAiEndpoints: 'AiManagement:Menu:OpenAiEndpoints',\n /** List of AI models (from providers). */\n Models: 'AiManagement:Menu:Models',\n /** AI Chat page. */\n Chat: 'AiManagement:Menu:Chat',\n /** List of Assists. */\n Assists: 'AiManagement:Menu:Assists',\n /** Delegated specialist agents (supervisor routing). */\n Agents: 'AiManagement:Menu:Agents',\n} as const;\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { AXPCommonMenuKeys } from '@acorex/modules/common';\nimport { AXPMenuProvider, AXPMenuProviderContext } from '@acorex/platform/common';\nimport { AXPSessionService } from '@acorex/platform/auth';\nimport { AXPEntityService } from '@acorex/platform/layout/entity';\nimport { inject, Injectable } from '@angular/core';\nimport { RootConfig } from './const';\nimport { AXPAiManagementMenuKeys } from './menu.keys';\n\n//#endregion\n\n//#region ---- Menu Provider ----\n\n@Injectable()\nexport class AXMAiManagementMenuProvider implements AXPMenuProvider {\n private readonly sessionService = inject(AXPSessionService);\n private readonly entityService = inject(AXPEntityService);\n\n async provide(context: AXPMenuProviderContext): Promise<void> {\n const appName = this.sessionService.application?.name ?? '';\n const module = RootConfig.module;\n\n //#region ---- Configuration > AI Management (assists, models) ----\n\n const aiManagementConfigMenu = context.find(AXPCommonMenuKeys.AiManagementConfig);\n if (!aiManagementConfigMenu.exists) {\n context.find(AXPCommonMenuKeys.Configuration).addItems([\n {\n name: AXPCommonMenuKeys.AiManagementConfig,\n text: '@general:menus.ai-management.title',\n icon: module.icon,\n type: 'menu',\n priority: 8941,\n children: [],\n },\n ]);\n }\n\n context.find(AXPCommonMenuKeys.AiManagementConfig).addItems([\n {\n name: AXPAiManagementMenuKeys.Agents,\n text: '@ai-management:module.menus.agents.title',\n path: this.entityService.createPath(module.name, RootConfig.entities.agent.name),\n icon: RootConfig.entities.agent.icon,\n priority: -1,\n },\n {\n name: AXPAiManagementMenuKeys.Assists,\n text: '@ai-management:module.menus.assists.title',\n path: this.entityService.createPath(module.name, RootConfig.entities.assist.name),\n icon: RootConfig.entities.assist.icon,\n priority: 0,\n },\n {\n name: AXPAiManagementMenuKeys.OpenAiEndpoints,\n text: '@ai-management:module.menus.open-ai-endpoints.title',\n path: this.entityService.createPath(module.name, RootConfig.entities.openAiEndpoint.name),\n icon: RootConfig.entities.openAiEndpoint.icon,\n priority: 2,\n },\n {\n name: AXPAiManagementMenuKeys.Models,\n text: '@ai-management:module.menus.models.title',\n path: this.entityService.createPath(module.name, RootConfig.entities.model.name),\n icon: RootConfig.entities.model.icon,\n priority: 1,\n },\n ]);\n\n //#endregion\n\n //#region ---- Root: AI Chat (next to Reports) ----\n\n // context.addItems([\n // {\n // name: AXPAiManagementMenuKeys.Chat,\n // text: '@ai-management:module.menus.chat.title',\n // path: `/${appName}/ai-management/chat`,\n // icon: 'fa-light fa-comments',\n // priority: 900002,\n // },\n // ]);\n\n //#endregion\n }\n}\n\n//#endregion\n","//#region ---- Setting Keys ----\n\n/**\n * AI Management setting keys.\n * Pattern: AiManagement:Setting:{Path}\n */\nexport const AXPAiManagementSettings = {\n /** Assist primary key (`id`) used when no assist is explicitly selected (tenant-scoped). */\n DefaultAssistId: 'AiManagement:Setting:DefaultAssistId',\n Providers: {\n Gemini: {\n ApiKey: 'AiManagement:Setting:Providers.Gemini.ApiKey',\n },\n Demis: {\n BearerToken: 'AiManagement:Setting:Providers.Demis.BearerToken',\n /** AiAgent catalog `name` (slug) used as Demisco `agent_uuid` when no agent run context exists. */\n DefaultAgentName: 'AiManagement:Setting:Providers.Demis.DefaultAgentName',\n },\n },\n} as const;\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { AXTranslationService } from '@acorex/core/translation';\nimport {\n AXPSettingDefinitionProvider,\n AXPSettingDefinitionProviderContext,\n} from '@acorex/platform/common';\nimport { AXPWidgetsList } from '@acorex/modules/common';\nimport { inject } from '@angular/core';\nimport { RootConfig } from './const';\nimport { AXPAiManagementSettings } from './settings.keys';\nimport { objectKeyValueTransforms } from '@acorex/platform/core';\n\n//#endregion\n\n//#region ---- Settings Provider ----\n\nexport class AXMAiManagementSettingProvider implements AXPSettingDefinitionProvider {\n private readonly translationService = inject(AXTranslationService);\n\n async provide(context: AXPSettingDefinitionProviderContext): Promise<void> {\n const trans = async (key: string) =>\n await this.translationService.translateAsync(`@ai-management:settings.${key}`);\n\n context\n .addGroup(\n 'ai-settings',\n await trans('group.title'),\n await trans('group.description'),\n 'fa-light fa-robot'\n )\n .addSection(\n 'default-assist',\n await trans('section.default-assist.title'),\n await trans('section.default-assist.description'),\n )\n .addSetting({\n key: AXPAiManagementSettings.DefaultAssistId,\n title: await trans('default-assist.name.title'),\n scope: 'T',\n isInherited: true,\n valueTransforms: objectKeyValueTransforms('name'),\n widget: {\n type: AXPWidgetsList.Editors.LookupBox,\n options: {\n entity: `${RootConfig.module.name}.${RootConfig.entities.assist.name}`,\n look: 'select',\n multiple: false,\n textField: 'title',\n valueField: 'name',\n hasClearButton: true,\n },\n },\n description: await trans('default-assist.name.description'),\n })\n .endSection()\n .addSection('gemini', await trans('section.gemini.title'), await trans('section.gemini.description'))\n .addSetting({\n key: AXPAiManagementSettings.Providers.Gemini.ApiKey,\n title: await trans('gemini.api-key.title'),\n scope: 'T',\n isInherited: true,\n defaultValue: '',\n widget: {\n type: AXPWidgetsList.Editors.TextBox,\n options: {\n placeholder: await trans('gemini.api-key.placeholder'),\n },\n },\n description: await trans('gemini.api-key.description'),\n })\n .endSection()\n .addSection('demis', await trans('section.demis.title'), await trans('section.demis.description'))\n .addSetting({\n key: AXPAiManagementSettings.Providers.Demis.BearerToken,\n title: await trans('demis.bearer-token.title'),\n scope: 'T',\n isInherited: true,\n defaultValue: '',\n widget: {\n type: AXPWidgetsList.Editors.TextBox,\n options: {\n placeholder: await trans('demis.bearer-token.placeholder'),\n },\n },\n description: await trans('demis.bearer-token.description'),\n })\n .addSetting({\n key: AXPAiManagementSettings.Providers.Demis.DefaultAgentName,\n title: await trans('demis.default-agent-name.title'),\n scope: 'T',\n isInherited: true,\n defaultValue: '',\n widget: {\n type: AXPWidgetsList.Editors.TextBox,\n options: {\n placeholder: await trans('demis.default-agent-name.placeholder'),\n },\n },\n description: await trans('demis.default-agent-name.description'),\n })\n .endSection()\n .endGroup();\n }\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { AXPWidgetsList } from '@acorex/modules/common';\nimport { AXDataSource } from '@acorex/cdk/common';\nimport { AXPDataSourceDefinition, AXPDataSourceDefinitionProvider, AXPFilterDefinition } from '@acorex/platform/core';\nimport { AXPEntityDetailDto, AXPEntityService } from '@acorex/platform/layout/entity';\nimport { inject, Injectable } from '@angular/core';\nimport { RootConfig } from '../const';\n\n//#endregion\n\n/** Registry name for AiAgent catalog rows (delegated specialist definitions). */\nexport const AI_AGENT_CATALOG_DATASOURCE_NAME = 'ai-management-agent-catalog';\n\n//#region ---- Provider ----\n\n@Injectable()\nexport class AXMAiAgentCatalogDataSourceDefinition implements AXPDataSourceDefinitionProvider {\n private readonly entityService = inject(AXPEntityService);\n\n items(): Promise<AXPDataSourceDefinition[]> {\n const accessor = this.entityService\n .withEntity(RootConfig.module.name, RootConfig.entities.agent.name)\n .data<string, AXPEntityDetailDto<string>, AXPEntityDetailDto<string>>();\n\n const columns = [\n { name: 'id', title: 'ID', datatype: 'uuid', type: AXPWidgetsList.Editors.TextBox },\n { name: 'title', title: 'Title', datatype: 'string', type: AXPWidgetsList.Editors.TextBox },\n { name: 'name', title: 'Name', datatype: 'string', type: AXPWidgetsList.Editors.TextBox },\n ];\n\n const filters = [\n {\n field: 'title',\n title: 'Title',\n operator: { type: 'contains' },\n widget: { type: AXPWidgetsList.Editors.TextBox },\n filterType: { advance: true, inline: true },\n } as AXPFilterDefinition,\n ];\n\n return Promise.resolve([\n {\n name: AI_AGENT_CATALOG_DATASOURCE_NAME,\n title: 'AI Agents (delegated specialists)',\n source: () => {\n return new AXDataSource({\n key: 'id',\n load: async (e) => {\n const res = await accessor.query({\n skip: e?.skip ?? 0,\n take: e?.take ?? 500,\n sort: [{ field: 'title', dir: 'asc' }],\n });\n return {\n items: (res.items ?? []) as unknown[],\n total: res.total ?? (res.items?.length ?? 0),\n };\n },\n byKey: async (key: unknown) => {\n return (await accessor.byKey(key as string)) as unknown;\n },\n pageSize: 500,\n });\n },\n columns,\n filters,\n textField: { name: 'title', title: 'Title' },\n valueField: { name: 'id', title: 'ID' },\n },\n ]);\n }\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { AXDataSource, type AXDataSourceFilterOption } from '@acorex/cdk/common';\nimport { RootConfig as PlatformManagementRootConfig } from '@acorex/modules/platform-management';\nimport {\n AXPDataSourceDefinition,\n AXPDataSourceDefinitionProvider,\n AXPFilterDefinition,\n type AXPQueryRequest,\n} from '@acorex/platform/core';\nimport { AXPEntityDetailDto, AXPEntityService } from '@acorex/platform/layout/entity';\nimport { AXPWidgetsCatalog } from '@acorex/platform/layout/widget-core';\nimport { inject, Injectable } from '@angular/core';\n\n//#endregion\n\n//#region ---- Constants ----\n\n/** AI-capable command definitions for specialist registry scope (matches AiAgent entity lookup filter). */\nexport const AI_COMMAND_REGISTRY_CATALOG_DATASOURCE_NAME = 'ai-management-command-registry-catalog';\n\n/** AI-capable query definitions for specialist registry scope. */\nexport const AI_QUERY_REGISTRY_CATALOG_DATASOURCE_NAME = 'ai-management-query-registry-catalog';\n\n/** Typed so nested `operator.type` literals are not widened to `string` (required by {@link AXDataSourceFilterOption}). */\nconst AI_CAPABILITY_FILTER: AXDataSourceFilterOption = {\n logic: 'and',\n filters: [\n { field: 'active', operator: { type: 'equal' }, value: true },\n {\n logic: 'or',\n filters: [\n { field: 'capabilities', operator: { type: 'equal' }, value: 'ai' },\n { field: 'capabilities', operator: { type: 'startsWith' }, value: 'ai,' },\n { field: 'capabilities', operator: { type: 'contains' }, value: ', ai' },\n ],\n },\n ],\n};\n\n//#endregion\n\n//#region ---- Command catalog ----\n\n@Injectable()\nexport class AXMAiCommandRegistryCatalogDataSourceDefinition implements AXPDataSourceDefinitionProvider {\n private readonly entityService = inject(AXPEntityService);\n\n items(): Promise<AXPDataSourceDefinition[]> {\n const accessor = this.entityService\n .withEntity(PlatformManagementRootConfig.module.name, PlatformManagementRootConfig.entities.commandDefinition.name)\n .data<string, AXPEntityDetailDto<string>, AXPEntityDetailDto<string>>();\n\n const columns = [\n { name: 'id', title: 'ID', datatype: 'uuid', type: AXPWidgetsCatalog.text },\n { name: 'catalogTitle', title: 'Title', datatype: 'string', type: AXPWidgetsCatalog.text },\n { name: 'name', title: 'Name', datatype: 'string', type: AXPWidgetsCatalog.text },\n ];\n\n const filters = [\n {\n field: 'catalogTitle',\n title: 'Title',\n operator: { type: 'contains' },\n widget: { type: AXPWidgetsCatalog.text },\n filterType: { advance: true, inline: true },\n } as AXPFilterDefinition,\n ];\n\n return Promise.resolve([\n {\n name: AI_COMMAND_REGISTRY_CATALOG_DATASOURCE_NAME,\n title: 'Command definitions (AI registry)',\n source: () => {\n return new AXDataSource({\n key: 'id',\n load: async (e) => {\n const request: AXPQueryRequest = {\n skip: e?.skip ?? 0,\n take: e?.take ?? 500,\n sort: [{ field: 'catalogTitle', dir: 'asc' }],\n filter: AI_CAPABILITY_FILTER,\n };\n const res = await accessor.query(request);\n return {\n items: (res.items ?? []) as unknown[],\n total: res.total ?? (res.items?.length ?? 0),\n };\n },\n byKey: async (key: unknown) => {\n return (await accessor.byKey(key as string)) as unknown;\n },\n pageSize: 500,\n });\n },\n columns,\n filters,\n textField: { name: 'catalogTitle', title: 'Title' },\n valueField: { name: 'id', title: 'ID' },\n },\n ]);\n }\n}\n\n//#endregion\n\n//#region ---- Query catalog ----\n\n@Injectable()\nexport class AXMAiQueryRegistryCatalogDataSourceDefinition implements AXPDataSourceDefinitionProvider {\n private readonly entityService = inject(AXPEntityService);\n\n items(): Promise<AXPDataSourceDefinition[]> {\n const accessor = this.entityService\n .withEntity(PlatformManagementRootConfig.module.name, PlatformManagementRootConfig.entities.queryDefinition.name)\n .data<string, AXPEntityDetailDto<string>, AXPEntityDetailDto<string>>();\n\n const columns = [\n { name: 'id', title: 'ID', datatype: 'uuid', type: AXPWidgetsCatalog.text },\n { name: 'catalogTitle', title: 'Title', datatype: 'string', type: AXPWidgetsCatalog.text },\n { name: 'name', title: 'Name', datatype: 'string', type: AXPWidgetsCatalog.text },\n ];\n\n const filters = [\n {\n field: 'catalogTitle',\n title: 'Title',\n operator: { type: 'contains' },\n widget: { type: AXPWidgetsCatalog.text },\n filterType: { advance: true, inline: true },\n } as AXPFilterDefinition,\n ];\n\n return Promise.resolve([\n {\n name: AI_QUERY_REGISTRY_CATALOG_DATASOURCE_NAME,\n title: 'Query definitions (AI registry)',\n source: () => {\n return new AXDataSource({\n key: 'id',\n load: async (e) => {\n const request: AXPQueryRequest = {\n skip: e?.skip ?? 0,\n take: e?.take ?? 500,\n sort: [{ field: 'catalogTitle', dir: 'asc' }],\n filter: AI_CAPABILITY_FILTER,\n };\n const res = await accessor.query(request);\n return {\n items: (res.items ?? []) as unknown[],\n total: res.total ?? (res.items?.length ?? 0),\n };\n },\n byKey: async (key: unknown) => {\n return (await accessor.byKey(key as string)) as unknown;\n },\n pageSize: 500,\n });\n },\n columns,\n filters,\n textField: { name: 'catalogTitle', title: 'Title' },\n valueField: { name: 'id', title: 'ID' },\n },\n ]);\n }\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { AXPWidgetsList } from '@acorex/modules/common';\nimport { AXDataSource } from '@acorex/cdk/common';\nimport { AXPDataSourceDefinition, AXPDataSourceDefinitionProvider, AXPFilterDefinition } from '@acorex/platform/core';\nimport { AXPEntityDetailDto, AXPEntityService } from '@acorex/platform/layout/entity';\nimport { inject, Injectable } from '@angular/core';\nimport { RootConfig } from '../const';\n\n//#endregion\n\n/**\n * Full AI model catalog for chat (rows that include `chat` or `vision` in `modelPurposes`).\n * Registry name: {@link AI_MODEL_CATALOG_DATASOURCE_NAME}.\n */\nexport const AI_MODEL_CATALOG_DATASOURCE_NAME = 'ai-management-model-catalog';\n\n/**\n * Image-generation models only (`modelPurposes` includes `image`).\n * Registry name: {@link AI_MODEL_IMAGE_CATALOG_DATASOURCE_NAME}.\n */\nexport const AI_MODEL_IMAGE_CATALOG_DATASOURCE_NAME = 'ai-management-model-catalog-image';\n\n/**\n * Speech-to-text models only (`modelPurposes` includes `speech`).\n * Registry name: {@link AI_MODEL_SPEECH_CATALOG_DATASOURCE_NAME}.\n */\nexport const AI_MODEL_SPEECH_CATALOG_DATASOURCE_NAME = 'ai-management-model-catalog-speech';\n\n/**\n * Text-to-speech models only (`modelPurposes` includes `tts`).\n * Registry name: {@link AI_MODEL_TTS_CATALOG_DATASOURCE_NAME}.\n */\nexport const AI_MODEL_TTS_CATALOG_DATASOURCE_NAME = 'ai-management-model-catalog-tts';\n\nexport type AXMAiModelPurposeSlug = 'chat' | 'vision' | 'image' | 'speech' | 'tts';\n\n/** Normalizes `modelPurposes` (and legacy `modelPurpose`) to unique non-empty slugs. */\nexport function normalizeModelPurposes(row: Record<string, unknown> | null | undefined): string[] {\n if (!row) {\n return ['chat'];\n }\n const multi = row['modelPurposes'];\n if (Array.isArray(multi) && multi.length > 0) {\n const out = multi\n .map((x) => String(x).trim())\n .filter((x) => x.length > 0);\n return [...new Set(out)];\n }\n const legacy = row['modelPurpose'];\n if (legacy == null || legacy === '') {\n return ['chat'];\n }\n return [String(legacy)];\n}\n\nexport function modelRowHasPurpose(\n row: Record<string, unknown> | null | undefined,\n purpose: AXMAiModelPurposeSlug,\n): boolean {\n return normalizeModelPurposes(row).includes(purpose);\n}\n\n/** Rows usable in chat / completion pickers: include `chat` or `vision`; not image/speech/tts-only. */\nexport function isChatPurposeModelRow(row: Record<string, unknown> | null | undefined): boolean {\n const p = normalizeModelPurposes(row);\n return p.includes('chat') || p.includes('vision');\n}\n\nexport function isImagePurposeModelRow(row: Record<string, unknown> | null | undefined): boolean {\n return modelRowHasPurpose(row, 'image');\n}\n\nexport function isSpeechPurposeModelRow(row: Record<string, unknown> | null | undefined): boolean {\n return modelRowHasPurpose(row, 'speech');\n}\n\nexport function isTtsPurposeModelRow(row: Record<string, unknown> | null | undefined): boolean {\n return modelRowHasPurpose(row, 'tts');\n}\n\n//#region ---- Provider ----\n\n@Injectable()\nexport class AXMAiModelCatalogDataSourceDefinition implements AXPDataSourceDefinitionProvider {\n private readonly entityService = inject(AXPEntityService);\n\n items(): Promise<AXPDataSourceDefinition[]> {\n const accessor = this.entityService\n .withEntity(RootConfig.module.name, RootConfig.entities.model.name)\n .data<string, AXPEntityDetailDto<string>, AXPEntityDetailDto<string>>();\n\n const columns = [\n {\n name: 'id',\n title: 'ID',\n datatype: 'uuid',\n type: AXPWidgetsList.Editors.TextBox,\n },\n {\n name: 'title',\n title: 'Title',\n datatype: 'string',\n type: AXPWidgetsList.Editors.TextBox,\n },\n ];\n\n const filters = [\n {\n field: 'title',\n title: 'Title',\n operator: { type: 'contains' },\n widget: { type: AXPWidgetsList.Editors.TextBox },\n filterType: { advance: true, inline: true },\n } as AXPFilterDefinition,\n ];\n\n const loadFiltered = async (\n e: { skip?: number; take?: number } | undefined,\n keep: (row: Record<string, unknown>) => boolean,\n ) => {\n const res = await accessor.query({\n skip: e?.skip ?? 0,\n take: e?.take ?? 500,\n sort: [{ field: 'title', dir: 'asc' }],\n });\n const all = (res.items ?? []) as unknown as Record<string, unknown>[];\n const items = all.filter(keep);\n return {\n items,\n total: items.length,\n };\n };\n\n return Promise.resolve([\n {\n name: AI_MODEL_CATALOG_DATASOURCE_NAME,\n title: 'AI Models (chat)',\n source: () => {\n return new AXDataSource({\n key: 'id',\n load: async (e) => loadFiltered(e, isChatPurposeModelRow),\n byKey: async (key: unknown) => {\n const row = (await accessor.byKey(key as string)) as unknown as Record<string, unknown> | null;\n if (!row || !isChatPurposeModelRow(row)) {\n return null;\n }\n return row;\n },\n pageSize: 500,\n });\n },\n columns,\n filters,\n textField: { name: 'title', title: 'Title' },\n valueField: { name: 'id', title: 'ID' },\n },\n {\n name: AI_MODEL_IMAGE_CATALOG_DATASOURCE_NAME,\n title: 'AI Models (image)',\n source: () => {\n return new AXDataSource({\n key: 'id',\n load: async (e) => loadFiltered(e, (row) => isImagePurposeModelRow(row)),\n byKey: async (key: unknown) => {\n const row = (await accessor.byKey(key as string)) as unknown as Record<string, unknown> | null;\n if (!row || !isImagePurposeModelRow(row)) {\n return null;\n }\n return row;\n },\n pageSize: 500,\n });\n },\n columns,\n filters,\n textField: { name: 'title', title: 'Title' },\n valueField: { name: 'id', title: 'ID' },\n },\n {\n name: AI_MODEL_SPEECH_CATALOG_DATASOURCE_NAME,\n title: 'AI Models (speech)',\n source: () => {\n return new AXDataSource({\n key: 'id',\n load: async (e) => loadFiltered(e, (row) => isSpeechPurposeModelRow(row)),\n byKey: async (key: unknown) => {\n const row = (await accessor.byKey(key as string)) as unknown as Record<string, unknown> | null;\n if (!row || !isSpeechPurposeModelRow(row)) {\n return null;\n }\n return row;\n },\n pageSize: 500,\n });\n },\n columns,\n filters,\n textField: { name: 'title', title: 'Title' },\n valueField: { name: 'id', title: 'ID' },\n },\n {\n name: AI_MODEL_TTS_CATALOG_DATASOURCE_NAME,\n title: 'AI Models (text-to-speech)',\n source: () => {\n return new AXDataSource({\n key: 'id',\n load: async (e) => loadFiltered(e, (row) => isTtsPurposeModelRow(row)),\n byKey: async (key: unknown) => {\n const row = (await accessor.byKey(key as string)) as unknown as Record<string, unknown> | null;\n if (!row || !isTtsPurposeModelRow(row)) {\n return null;\n }\n return row;\n },\n pageSize: 500,\n });\n },\n columns,\n filters,\n textField: { name: 'title', title: 'Title' },\n valueField: { name: 'id', title: 'ID' },\n },\n ]);\n }\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { AXPTag, AXPTagProvider } from '@acorex/platform/core';\nimport { Injectable } from '@angular/core';\n\n//#endregion\n\n/**\n * System tags for the AiModel entity `modelPurposes` field (tag-editor).\n * `title` values are stored as-is on the entity; keep them stable slugs.\n */\nconst AI_MODEL_PURPOSE_TAGS: AXPTag[] = [\n {\n id: 'ai-model-purpose-chat',\n title: 'chat',\n color: '#0284c7',\n description: 'Chat / text completion',\n scope: 'system',\n },\n {\n id: 'ai-model-purpose-vision',\n title: 'vision',\n color: '#7c3aed',\n description: 'Multimodal (image input in chat)',\n scope: 'system',\n },\n {\n id: 'ai-model-purpose-image',\n title: 'image',\n color: '#db2777',\n description: 'Image generation',\n scope: 'system',\n },\n {\n id: 'ai-model-purpose-speech',\n title: 'speech',\n color: '#16a34a',\n description: 'Speech to text',\n scope: 'system',\n },\n {\n id: 'ai-model-purpose-tts',\n title: 'tts',\n color: '#ea580c',\n description: 'Text to speech',\n scope: 'system',\n },\n];\n\n//#region ---- Provider ----\n\n@Injectable()\nexport class AXMAiModelPurposeTagProvider extends AXPTagProvider {\n readonly name = 'ai-model-purpose';\n\n override provide(): Promise<AXPTag[]> {\n return Promise.resolve(AI_MODEL_PURPOSE_TAGS);\n }\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { Injectable } from '@angular/core';\nimport type { AXPAiAssistRunInput, AXPAiAssistRunResult, AXPAiAssistShowOptions } from '../ai-assist.types';\n\n//#endregion\n\n//#region ---- Abstract token ----\n\n/**\n * Optional cross-cutting AI assist: programmatic {@link run} and dialog {@link show}.\n * Implemented by {@link AXPAiManagerService}. Consumers outside ai-management should prefer hooks or optional injection.\n */\n@Injectable()\nexport abstract class AXPAiAssistService {\n abstract run(input: AXPAiAssistRunInput): Promise<AXPAiAssistRunResult>;\n\n /** Opens prompt UI; on Send runs {@link run} and closes the dialog. Cancel resolves `null`. */\n abstract show(options: AXPAiAssistShowOptions): Promise<AXPAiAssistRunResult | null>;\n}\n\n//#endregion\n","//#region ---- Structured output ----\n\n/** Default max completion tokens when the AiModel row has no `maxOutputTokens` and the caller omits `maxTokens`. */\nexport const AXPAiAssistDefaultStructuredMaxTokens = 128_000;\n\n/** Default maximum follow-up turns after the first model response when validating structured JSON (implementation may use this). */\nexport const AXPAiAssistDefaultMaxStructuredRetries = 3;\n\n/**\n * Validates parsed JSON from the assistant. Return the validated value (possibly narrowed), or throw with a message\n * the pipeline can send back to the model on retry.\n */\nexport type AXPAiStructuredValidator<T = unknown> = (parsed: unknown) => T | Promise<T>;\n\n/**\n * Thrown when {@link AXPAiAssistRunInput.expectStructuredOutput} is true but the assistant output could not be\n * parsed and optionally validated after all attempts.\n */\nexport class AXPAiStructuredOutputError extends Error {\n /** 1-based count of engine runs performed for this structured-output session. */\n readonly attempts: number;\n\n /** Truncated snapshot of the last assistant plain text (for debugging). */\n readonly lastAssistantText: string;\n\n /** Human-readable validation or parse failure detail. */\n readonly validationMessage: string;\n\n /** Why the pipeline stopped. */\n readonly code?: 'duplicate_assistant_output' | 'validation_exhausted';\n\n constructor(options: {\n message: string;\n attempts: number;\n lastAssistantText: string;\n validationMessage: string;\n cause?: unknown;\n code?: 'duplicate_assistant_output' | 'validation_exhausted';\n }) {\n super(options.message, options.cause !== undefined ? { cause: options.cause } : undefined);\n this.name = 'AXPAiStructuredOutputError';\n this.attempts = options.attempts;\n this.lastAssistantText = options.lastAssistantText;\n this.validationMessage = options.validationMessage;\n this.code = options.code;\n }\n}\n\n//#endregion\n\n//#region ---- Picker & prompt surface ----\n\n/** One row for assist / agent pickers (catalog UI). */\nexport interface AXPAiAssistPickerRow {\n id: string;\n name?: string;\n title: string;\n}\n\n/** One persisted user attachment (same storage contract as the AI chat composer). */\nexport interface AXPAiAssistUserMediaAttachment {\n /** `image` / `audio` / `file` (PDF, text, spreadsheets, and other document MIME types). */\n kind: 'image' | 'audio' | 'file';\n fileId: string;\n mimeType: string;\n name?: string;\n}\n\n/**\n * Payload when submitting the assist prompt bottom panel (text, optional target assist/agent, optional media).\n */\nexport interface AXPAiAssistPromptSubmitPayload {\n prompt: string;\n assistId?: string;\n directAgentId?: string;\n userMediaAttachments: AXPAiAssistUserMediaAttachment[];\n}\n\n//#endregion\n\n//#region ---- Context & run ----\n\n/**\n * Optional structured hints for a single assist run (serialized into the user message by the implementation).\n */\nexport interface AXPAiAssistRunContext {\n /** Short bullet hints appended to the prompt for the model. */\n hints?: string[];\n /** Extra system-level instruction for this run (implementation may emit a system message). */\n systemInstruction?: string;\n /** Arbitrary structured payload (JSON-serialized in the user message when present). */\n structuredContext?: unknown;\n}\n\n/**\n * Input for the AI assist `run` API (implemented in ai-management).\n */\nexport interface AXPAiAssistRunInput {\n prompt: string;\n /**\n * Optional images, audio, or documents (`fileId` from tenant storage). When non-empty, the implementation builds one multimodal\n * user message (same shape as the AI chat composer) plus the serialized prompt body as text segments.\n */\n userMediaAttachments?: AXPAiAssistUserMediaAttachment[];\n context?: AXPAiAssistRunContext;\n /**\n * Catalog assist id. When omitted together with {@link directAgentId}, the platform default assist is used.\n */\n assistId?: string;\n directAgentId?: string;\n maxSteps?: number;\n temperature?: number;\n /**\n * Max completion tokens for this engine run (when the provider supports it). Structured JSON runs apply a higher\n * default unless {@link structuredOutputMaxTokens} is set.\n */\n maxTokens?: number;\n /** When true, implementation tries to parse assistant text as JSON into {@link AXPAiAssistRunResult.structured}. */\n expectStructuredOutput?: boolean;\n /** Extra instruction appended so the model returns JSON (used when {@link expectStructuredOutput} is true). */\n structuredOutputInstruction?: string;\n /**\n * Shallow merge over built-in platform runtime context fields (see ai-management implementation).\n */\n platformRuntimeNotes?: Record<string, unknown>;\n\n /**\n * Max extra engine turns after the first response when structured output is invalid (default {@link AXPAiAssistDefaultMaxStructuredRetries}).\n * Total attempts = 1 + maxStructuredRetries.\n */\n maxStructuredRetries?: number;\n\n /** Optional schema or domain validation after JSON parse. */\n structuredValidator?: AXPAiStructuredValidator;\n\n /**\n * When false, only one engine run is performed; invalid structured output throws {@link AXPAiStructuredOutputError}.\n * When true (default for {@link expectStructuredOutput}), invalid output triggers follow-up user messages in the same transcript.\n */\n retryOnInvalidStructure?: boolean;\n\n /**\n * Optional description of the expected JSON shape (TypeScript-style or JSON schema summary), appended to the first\n * user message and to retry prompts so the model stays aligned and retries are more accurate.\n */\n structuredOutputSchemaSummary?: string;\n\n /**\n * Overrides {@link maxTokens} for {@link expectStructuredOutput} runs only. Prefer setting this or leaving defaults so\n * the implementation can apply {@link AXPAiAssistDefaultStructuredMaxTokens} and avoid truncated JSON.\n */\n structuredOutputMaxTokens?: number;\n}\n\n/**\n * Result of the AI assist `run` API.\n */\nexport interface AXPAiAssistRunResult {\n /** Primary assistant reply text (extracted from the engine transcript). */\n text: string;\n /**\n * Present when {@link AXPAiAssistRunInput.expectStructuredOutput} is true: validated structured payload\n * (parse + optional {@link AXPAiAssistRunInput.structuredValidator}). On failure the implementation throws\n * {@link AXPAiStructuredOutputError} instead of returning.\n */\n structured?: unknown;\n /**\n * When {@link AXPAiAssistRunInput.expectStructuredOutput} is false: engine usage / provider payload for that single run.\n * When true: {@link AXPAiAssistStructuredOutputRunRaw} with per-attempt usage and totals for debugging.\n */\n raw?: unknown;\n}\n\n//#endregion\n\n//#region ---- Structured run raw (debugging) ----\n\n/**\n * Token usage for a single engine run; numeric fields align with {@link AXPAiEngineUsageTotals} in this module\n * for stable client-side debugging contracts.\n */\nexport interface AXPAiAssistTokenUsageSnapshot {\n promptTokens: number;\n completionTokens: number;\n totalTokens: number;\n cachedPromptTokens?: number;\n}\n\n/**\n * One engine execution within a structured-output session.\n */\nexport interface AXPAiAssistStructuredOutputAttemptRecord {\n /** 1-based index of this engine run. */\n attemptIndex: number;\n /** Usage reported for this run only. */\n usage?: AXPAiAssistTokenUsageSnapshot;\n /** Whether a last-provider payload was present for this run. */\n hasLastProviderResult: boolean;\n}\n\n/**\n * Explicit `raw` shape for {@link AXPAiAssistRunResult} when {@link AXPAiAssistRunInput.expectStructuredOutput} is true.\n */\nexport interface AXPAiAssistStructuredOutputRunRaw {\n kind: 'structured-output';\n /** One entry per engine call (`runEngine` / structured-output retries). */\n attempts: AXPAiAssistStructuredOutputAttemptRecord[];\n /** Cumulative usage across all attempts. */\n totalUsage?: AXPAiAssistTokenUsageSnapshot;\n /** Count of engine runs in this session (same as the last `attemptIndex`). */\n finalAttempt: number;\n lastProviderResult?: unknown;\n}\n\n//#endregion\n\n//#region ---- Show prompt surface ----\n\n/**\n * Typical max width of the assist prompt column inside the bottom overlay (maps to `contentMaxWidthPx`).\n */\nexport type AXPAiAssistPopupSize = 'sm' | 'md' | 'lg' | 'xl' | 'full';\n\n/**\n * Options for the AI assist `show` prompt API: same run-related fields as {@link AXPAiAssistRunInput} except `prompt`,\n * plus UI chrome. The user-entered prompt from the surface is merged on Send.\n */\nexport interface AXPAiAssistShowOptions {\n title: string;\n placeholder?: string;\n initialPrompt?: string;\n size?: AXPAiAssistPopupSize;\n context?: AXPAiAssistRunContext;\n /**\n * Optional catalog assist. When omitted (and {@link directAgentId} is not set), the tenant/platform default assist applies.\n */\n assistId?: string;\n directAgentId?: string;\n maxSteps?: number;\n temperature?: number;\n maxTokens?: number;\n expectStructuredOutput?: boolean;\n structuredOutputInstruction?: string;\n platformRuntimeNotes?: Record<string, unknown>;\n maxStructuredRetries?: number;\n structuredValidator?: AXPAiStructuredValidator;\n retryOnInvalidStructure?: boolean;\n structuredOutputSchemaSummary?: string;\n structuredOutputMaxTokens?: number;\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { Injectable } from '@angular/core';\nimport type { AXPAiEngineRunOptions, AXPAiEngineRunResult } from './ai-engine.types';\n\n//#endregion\n\n//#region ---- Engine (abstract service) ----\n\n/**\n * Backend boundary for AI assist runs (chat + tool rounds). Connectivity implementations execute registry\n * commands/queries during the run loop.\n * Wire a concrete implementation via Angular providers (for example `provide: AXPAiEngine` with `useClass`).\n */\n@Injectable()\nexport abstract class AXPAiEngine {\n /**\n * Sends the conversation to the AI backend and returns updated messages (including tool rounds).\n */\n abstract run(options: AXPAiEngineRunOptions): Promise<AXPAiEngineRunResult>;\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport type { AXMAiManagementAgentEntityModel } from '../entities/agent/agent.types';\nimport type { AXMAiManagementAssistEntityModel } from '../entities/assist/assist.types';\n\n//#endregion\n\n//#region ---- Constants ----\n\n/** Prefix for supervisor-delegated specialist tools (`${AXPAI_SUPERVISOR_AGENT_TOOL_PREFIX}${agentId}`). */\nexport const AXPAI_SUPERVISOR_AGENT_TOOL_PREFIX = 'agent:' as const;\n\n/** Default cap for main assist / direct-agent chat tool rounds (one provider call per step). */\nexport const AXPAI_ENGINE_DEFAULT_MAX_STEPS = 16;\n\n/** Default cap for delegated specialist sub-runs when the agent row has no positive `maxSteps`. */\nexport const AXPAI_DELEGATED_AGENT_DEFAULT_MAX_STEPS = 8;\n\n/** System prompt for vision OCR / document text extraction. */\nexport const AXPAI_DOCUMENT_VISION_EXTRACTION_SYSTEM =\n 'You are a precise document-reading assistant. Extract readable plain text from the attached file. Preserve headings and lists where obvious. If the content is unreadable, return a short explanation. Output plain text only, no markdown code fences.';\n\n/** Default user line when the caller passes an empty instruction for vision extraction. */\nexport const AXPAI_DOCUMENT_VISION_DEFAULT_USER_INSTRUCTION =\n 'Extract all readable text from this document. Return plain text only.';\n\n//#endregion\n\n//#region ---- Core aliases ----\n\nexport type AXPAiChatTransport = 'openai' | 'gemini' | 'demis';\n\nexport type AXPAiPlanningMode = 'off' | 'once' | 'when-needed';\n\n//#endregion\n\n//#region ---- Platform runtime context ----\n\n/**\n * Snapshot of session / tenant / regional defaults injected into system prompts.\n * Built by {@link AXPAiPlatformRuntimeContextBuilder}.\n */\nexport interface AXPAiPlatformRuntimeContext {\n userId?: string;\n userDisplayName?: string;\n tenantId?: string;\n tenantTitle?: string;\n applicationId?: string;\n applicationTitle?: string;\n locale?: string;\n calendarSystem?: string;\n timeZone?: string;\n country?: string;\n currentInstant?: string;\n currentLocalDateTime?: string;\n notes?: string;\n}\n\n//#endregion\n\n//#region ---- Delegated agent parameter bindings (supervisor / assist) ----\n\n/** Who supplies a delegated `agent:<id>` tool argument at runtime. */\nexport type AXPAiDelegatedParameterBinding = 'assist_locked' | 'assist_default' | 'supervisor';\n\n/**\n * Per-field policy for arguments the supervisor passes when calling a delegated specialist.\n * Names are the tool argument keys; the runtime builds supervisor JSON Schema from this list.\n */\nexport interface AXPAiDelegatedParameterDefinition {\n name: string;\n title?: string;\n description?: string;\n binding: AXPAiDelegatedParameterBinding;\n /** Used when assist row has no value for an `assist_default` key (optional fallback). */\n defaultValue?: unknown;\n /**\n * Optional UI grouping for property viewer / assist parameter editor (collapsible groups in one tab).\n */\n group?: {\n name: string;\n title: string;\n order?: number;\n };\n}\n\n//#endregion\n\n//#region ---- Catalog / entity row shapes (effective rows) ----\n\n/**\n * Effective Assist entity row (chat policy, prompts, delegated routing).\n * Fields are partial except `id` because runtime/query payloads may omit unused slices.\n */\nexport type AXPAiEffectiveAssistRow = Partial<Omit<AXMAiManagementAssistEntityModel, 'id'>> & {\n id: string;\n /** Optional catalog row not persisted on the assist entity; used by mock seeds. */\n imageModelId?: string;\n};\n\n/**\n * Effective AiAgent catalog row (registry scope + optional supervisor JSON schema).\n * Fields are partial except `id` because runtime/query payloads may omit unused slices.\n */\nexport type AXPAiEffectiveAgentRow = Partial<Omit<AXMAiManagementAgentEntityModel, 'id'>> & {\n id: string;\n /** Defines keys, bindings, and drives supervisor JSON Schema (empty or omitted → default `query` only). */\n parameterDefinitions?: AXPAiDelegatedParameterDefinition[] | null;\n};\n\n//#endregion\n\n//#region ---- Model list (picker service) ----\n\nexport interface AXPAiChatModelListRequest {\n assistId?: string | null;\n directAgentId?: string | null;\n}\n\nexport interface AXPAiChatModelListItem {\n id: string;\n name: string;\n title: string;\n chatTransport?: string;\n maxContextTokens?: number;\n inputPricePerMillion?: number;\n outputPricePerMillion?: number;\n cachedInputPricePerMillion?: number;\n}\n\n//#endregion\n\n//#region ---- Chat transcript: responses & messages ----\n\nexport interface AXPAiChatTextResponse {\n type: 'text';\n content: string;\n}\n\n/** Model reasoning / planning segment; paired with {@link AXPAiChatTextResponse} in assistant messages. Persisted in the transcript; a future setting may omit it from storage. */\nexport interface AXPAiChatThinkResponse {\n type: 'think';\n content: string;\n}\n\nexport interface AXPAiChatImageResponse {\n type: 'image';\n content: {\n fileId: string;\n mimeType: string;\n name?: string;\n };\n}\n\n/** User message attachment or tool-produced audio segment (replay in chat UI). */\nexport interface AXPAiChatAudioResponse {\n type: 'audio';\n content: {\n fileId: string;\n mimeType: string;\n name?: string;\n };\n}\n\n/** User message document attachment (PDF, text, spreadsheets, etc.) resolved from tenant storage for providers. */\nexport interface AXPAiChatFileResponse {\n type: 'file';\n content: {\n fileId: string;\n mimeType: string;\n name?: string;\n };\n}\n\nexport interface AXPAiChatNodeResponse {\n type: 'node';\n content: unknown;\n}\n\n/** Assistant-side tool / agent invocation segment (replay + OpenAI `tool_calls`). */\nexport interface AXPAiChatToolInvocationContent {\n command: string;\n arguments: unknown;\n}\n\nexport interface AXPAiChatToolAssistantResponse {\n type: 'tool';\n content: AXPAiChatToolInvocationContent;\n callId?: string;\n}\n\nexport interface AXPAiChatAgentAssistantResponse {\n type: 'agent';\n content: AXPAiChatToolInvocationContent;\n callId?: string;\n}\n\nexport interface AXPAiChatToolResultResponse {\n type: 'tool_result';\n callId: string;\n content: unknown;\n}\n\nexport interface AXPAiDelegatedAgentResultPayload {\n success: boolean;\n error?: string;\n data?: {\n answer?: string;\n agentName?: string;\n agentId?: string;\n };\n}\n\nexport interface AXPAiChatAgentResultResponse {\n type: 'agent_result';\n callId: string;\n name?: string;\n content: AXPAiDelegatedAgentResultPayload;\n}\n\nexport type AXPAiChatResponse =\n | AXPAiChatTextResponse\n | AXPAiChatThinkResponse\n | AXPAiChatImageResponse\n | AXPAiChatAudioResponse\n | AXPAiChatFileResponse\n | AXPAiChatNodeResponse\n | AXPAiChatToolAssistantResponse\n | AXPAiChatAgentAssistantResponse\n | AXPAiChatToolResultResponse\n | AXPAiChatAgentResultResponse;\n\n/**\n * One chat line in the persisted transcript (`user` / `assistant` / `system` / `tool`).\n * Optional {@link AXPAiChatMessage.delegatedReflection} marks ephemeral delegated sub-run reflections.\n */\nexport interface AXPAiChatMessage {\n role: 'system' | 'user' | 'assistant' | 'tool';\n responses: AXPAiChatResponse[];\n /** OpenAI `name` on tool results / some provider echoes. */\n name?: string;\n /** When true, excluded from delegated “answer” synthesis (see {@link axpAiChatMessageIsDelegatedReflectionExcluded}). */\n delegatedReflection?: boolean;\n}\n\n//#endregion\n\n//#region ---- Tool calls & schemas ----\n\nexport interface AXPAiToolCall {\n id: string;\n name: string;\n arguments: unknown;\n}\n\nexport interface AXPAiToolSchema {\n name: string;\n description?: string;\n parameters: Record<string, unknown>;\n}\n\n/** Registry allow-list on an assist or agent (command ids / query ids). */\nexport interface AXPAiEngineRegistryToolFields {\n /** Same persistence shapes as {@link AXPAiEffectiveAgentRow.toolIds}. */\n toolIds?: unknown;\n /** Same persistence shapes as {@link AXPAiEffectiveAgentRow.queryIds}. */\n queryIds?: unknown;\n}\n\n//#endregion\n\n//#region ---- Engine: last provider snapshot (mock / future real API) ----\n\n/**\n * Normalized payload from the last underlying LLM/vendor call during an engine run.\n * Detailed chat/extract/image request types live in connectivity mock (`ai-chat-provider.types`).\n */\nexport interface AXPAiEngineLastProviderPayload {\n messages: AXPAiChatMessage[];\n toolCalls?: AXPAiToolCall[];\n rawResponse?: unknown;\n}\n\n//#endregion\n\n//#region ---- Engine run: usage, options, results ----\n\nexport interface AXPAiEngineUsageTotals {\n promptTokens: number;\n completionTokens: number;\n totalTokens: number;\n cachedPromptTokens?: number;\n}\n\n/** Cached specialist transcript for a supervisor `agent:*` tool_call id (mock LRU / future server mirror). */\nexport interface AXPAiDelegatedAgentTranscriptEntry {\n agentName?: string;\n messages: AXPAiChatMessage[];\n}\n\nexport interface AXPAiDelegatedNestedToolCallContext {\n delegationCallId: string;\n agentId: string;\n agentName?: string;\n}\n\nexport type AXPAiEngineRunEvent =\n | { type: 'assistant_stream_reset' }\n | {\n type: 'assistant_stream_delta';\n delta: string;\n /**\n * `think` = planning-only stream (no tags required). Omitted or `text` = main assistant stream.\n * Raw `delta` strings are the same as from the provider; this field is the engine’s semantic.\n */\n segment?: 'text' | 'think';\n }\n | { type: 'tool_call_start'; call: AXPAiToolCall }\n | { type: 'tool_call_end'; call: AXPAiToolCall; resultMessage: AXPAiChatMessage }\n | {\n type: 'delegated_agent_nested_tool_call_start';\n ctx: AXPAiDelegatedNestedToolCallContext;\n call: AXPAiToolCall;\n }\n | {\n type: 'delegated_agent_nested_tool_call_end';\n ctx: AXPAiDelegatedNestedToolCallContext;\n call: AXPAiToolCall;\n resultMessage: AXPAiChatMessage;\n }\n | {\n type: 'delegated_agent_nested_stream_reset';\n ctx: AXPAiDelegatedNestedToolCallContext;\n }\n | {\n type: 'delegated_agent_nested_stream_delta';\n ctx: AXPAiDelegatedNestedToolCallContext;\n delta: string;\n }\n | { type: 'delegated_agent_reflection_phase'; active: boolean };\n\nexport interface AXPAiEngineRunOptions {\n messages: AXPAiChatMessage[];\n assistId?: string;\n /** Demisco multipart `session_uuid` when using Demis transport (optional). */\n demisSessionUuid?: string;\n /** Direct AiAgent thread (registry tools only); uses tenant default assist for model policy when assist id omitted. */\n directAgentId?: string;\n modelEntityId?: string;\n /** Legacy catalog `name` (API id) before entity ids were used. */\n modelId?: string;\n maxSteps?: number;\n maxTokens?: number;\n temperature?: number;\n /** Overrides assist-stored planning for this run (UI / tests). */\n planningMode?: AXPAiPlanningMode;\n platformRuntimeContext?: AXPAiPlatformRuntimeContext | null;\n onRunEvent?: (event: AXPAiEngineRunEvent) => void;\n}\n\nexport interface AXPAiEngineRunResult {\n messages: AXPAiChatMessage[];\n lastProviderResult?: AXPAiEngineLastProviderPayload;\n usageTotals?: AXPAiEngineUsageTotals;\n delegatedTranscriptsByCallId?: Record<string, AXPAiDelegatedAgentTranscriptEntry>;\n}\n\n//#endregion\n\n//#region ---- Structured text & media requests ----\n\nexport interface AXPAiStructuredTextCompletionOptions {\n assistId?: string;\n modelEntityId?: string;\n modelId?: string;\n messages: AXPAiChatMessage[];\n maxTokens?: number;\n temperature?: number;\n platformRuntimeContext?: AXPAiPlatformRuntimeContext | null;\n}\n\nexport interface AXPAiExtractDocumentTextFromStoredFileRequest {\n assistId: string;\n chatTransport: AXPAiChatTransport;\n fileId: string;\n instruction?: string;\n modelEntityId?: string;\n}\n\n//#endregion\n\n//#region ---- Loose tool/agent result bodies (persisted tool output JSON) ----\n\nexport type AXPAiChatToolResultBody = unknown;\n\nexport type AXPAiChatAgentResultBody = AXPAiDelegatedAgentResultPayload;\n\n//#endregion\n\n//#region ---- Transcript helpers ----\n\nexport function axpAiChatTextMessage(role: AXPAiChatMessage['role'], text: string): AXPAiChatMessage {\n return {\n role,\n responses: [{ type: 'text', content: text }],\n };\n}\n\nexport function axpAiChatUserMessage(responses: AXPAiChatResponse[]): AXPAiChatMessage {\n return {\n role: 'user',\n responses,\n };\n}\n\nexport function axpAiChatMessageGetText(message: AXPAiChatMessage): string {\n const parts: string[] = [];\n for (const r of message.responses) {\n if (r.type === 'text') {\n parts.push(r.content);\n } else if (r.type === 'node') {\n try {\n parts.push(JSON.stringify({ type: 'node', content: r.content }));\n } catch {\n parts.push('[node]');\n }\n }\n }\n return parts.join('\\n\\n');\n}\n\n/**\n * Planning-only assistant output is always internal reasoning. Provider text may be untagged;\n * the engine maps `text` responses to `think` so the transcript and UI are correct without\n * requiring `<think>` / `<think>` in the model output.\n */\nexport function axpAiCoercePlanningAssistantTextToThink(\n planningMessages: AXPAiChatMessage[],\n): AXPAiChatMessage[] {\n return planningMessages.map((m) => {\n if (m.role !== 'assistant') {\n return m;\n }\n return {\n ...m,\n responses: m.responses.map((r) => {\n if (r.type === 'text') {\n return { type: 'think', content: r.content };\n }\n return r;\n }),\n };\n });\n}\n\n//#region ---- Assistant plain text: embedded node JSON envelopes ----\n\nfunction isAssistantNodeTypeEnvelope(o: unknown): o is { type: 'node'; content: unknown } {\n if (!o || typeof o !== 'object' || Array.isArray(o)) {\n return false;\n }\n const r = o as Record<string, unknown>;\n return r['type'] === 'node' && 'content' in r;\n}\n\n/**\n * Parses one balanced `{ ... }` JSON object starting at `start` (must point at `{`).\n */\nfunction tryParseBalancedJsonObjectAt(s: string, start: number): { value: unknown; end: number } | null {\n if (s[start] !== '{') {\n return null;\n }\n let depth = 0;\n let inString = false;\n let escape = false;\n for (let i = start; i < s.length; i++) {\n const c = s[i];\n if (inString) {\n if (escape) {\n escape = false;\n continue;\n }\n if (c === '\\\\') {\n escape = true;\n continue;\n }\n if (c === '\"') {\n inString = false;\n }\n continue;\n }\n if (c === '\"') {\n inString = true;\n continue;\n }\n if (c === '{') {\n depth++;\n } else if (c === '}') {\n depth--;\n if (depth === 0) {\n const slice = s.slice(start, i + 1);\n try {\n return { value: JSON.parse(slice) as unknown, end: i + 1 };\n } catch {\n return null;\n }\n }\n }\n }\n return null;\n}\n\nfunction mergeAdjacentAssistantTextResponses(seq: AXPAiChatResponse[]): AXPAiChatResponse[] {\n const out: AXPAiChatResponse[] = [];\n for (const r of seq) {\n if (r.type !== 'text') {\n out.push(r);\n continue;\n }\n const prev = out[out.length - 1];\n const v = r.content.trim();\n if (!v.length) {\n continue;\n }\n if (prev && prev.type === 'text') {\n const joined = `${prev.content}\\n\\n${v}`.trim();\n out[out.length - 1] = { type: 'text', content: joined };\n } else {\n out.push({ type: 'text', content: v });\n }\n }\n return out;\n}\n\n/**\n * Splits raw assistant prose into ordered `text` / `node` responses by detecting JSON objects\n * shaped like `{ \"type\": \"node\", \"content\": <AXPWidgetNode> }` anywhere in the string.\n */\nfunction axpAiExpandPlainAssistantTextToResponses(raw: string): AXPAiChatResponse[] {\n const parts: AXPAiChatResponse[] = [];\n let i = 0;\n const pushText = (value: string): void => {\n const v = value.trim();\n if (v.length > 0) {\n parts.push({ type: 'text', content: v });\n }\n };\n\n while (i < raw.length) {\n const braceIdx = raw.indexOf('{', i);\n if (braceIdx < 0) {\n pushText(raw.slice(i));\n break;\n }\n pushText(raw.slice(i, braceIdx));\n const parsed = tryParseBalancedJsonObjectAt(raw, braceIdx);\n if (parsed && isAssistantNodeTypeEnvelope(parsed.value)) {\n parts.push({ type: 'node', content: parsed.value.content });\n i = parsed.end;\n } else if (parsed) {\n pushText(raw.slice(braceIdx, parsed.end));\n i = parsed.end;\n } else {\n pushText(raw.slice(braceIdx, braceIdx + 1));\n i = braceIdx + 1;\n }\n }\n return mergeAdjacentAssistantTextResponses(parts);\n}\n\n//#endregion\n\nexport function axpAiChatMessagesFromProviderAssistant(\n text: string,\n toolCalls?: AXPAiToolCall[],\n): AXPAiChatMessage[] {\n const normalizeThinkingTags = (raw: string): string =>\n raw\n .replace(/&lt;(\\/?redacted_thinking)&gt;/gi, '<$1>')\n .replace(/&lt;(\\/?think)&gt;/gi, '<$1>');\n\n const splitAssistantResponses = (raw: string): AXPAiChatResponse[] => {\n const normalized = normalizeThinkingTags(raw ?? '');\n if (!normalized) {\n return [];\n }\n const out: AXPAiChatResponse[] = [];\n const appendPlainSlice = (value: string): void => {\n out.push(...axpAiExpandPlainAssistantTextToResponses(value));\n };\n const pushThink = (value: string): void => {\n const v = value.trim();\n if (v.length > 0) {\n out.push({ type: 'think', content: v });\n }\n };\n\n const thinkRe = /<(redacted_thinking|think)>([\\s\\S]*?)<\\/\\1>/gi;\n let last = 0;\n let m: RegExpExecArray | null;\n while ((m = thinkRe.exec(normalized)) !== null) {\n appendPlainSlice(normalized.slice(last, m.index));\n pushThink(m[2] ?? '');\n last = m.index + m[0].length;\n }\n appendPlainSlice(normalized.slice(last));\n return mergeAdjacentAssistantTextResponses(out);\n };\n\n const parsedResponses = splitAssistantResponses(text);\n const calls = toolCalls ?? [];\n const out: AXPAiChatMessage[] = [];\n if (parsedResponses.length > 0) {\n out.push({\n role: 'assistant',\n responses: parsedResponses,\n });\n }\n for (const tc of calls) {\n const isDelegatedAgent = axpAiParseSupervisorAgentToolName(tc.name) != null;\n out.push({\n role: 'assistant',\n responses: [\n isDelegatedAgent\n ? {\n type: 'agent',\n content: {\n command: tc.name,\n arguments: tc.arguments,\n },\n callId: tc.id,\n }\n : {\n type: 'tool',\n content: {\n command: tc.name,\n arguments: tc.arguments,\n },\n callId: tc.id,\n },\n ],\n });\n }\n if (out.length === 0) {\n out.push(axpAiChatTextMessage('assistant', ''));\n }\n return out;\n}\n\nexport function axpAiToolCallFromAssistantToolMessage(message: AXPAiChatMessage): AXPAiToolCall | null {\n if (message.role !== 'assistant') {\n return null;\n }\n for (const r of message.responses) {\n if (r.type === 'tool' || r.type === 'agent') {\n const callId = r.callId?.trim() ?? '';\n const command = r.content.command?.trim() ?? '';\n if (!command) {\n return null;\n }\n return {\n id: callId || `call_${command}`,\n name: command,\n arguments: r.content.arguments,\n };\n }\n }\n return null;\n}\n\nexport function axpAiChatToolResultMessage(callId: string, content: unknown, toolName?: string): AXPAiChatMessage {\n const id = callId.trim();\n return {\n role: 'tool',\n ...(toolName?.trim() ? { name: toolName.trim() } : {}),\n responses: [\n {\n type: 'tool_result',\n callId: id,\n content,\n },\n ],\n };\n}\n\nexport function axpAiChatAgentResultMessage(\n callId: string,\n content: AXPAiDelegatedAgentResultPayload,\n toolName?: string,\n): AXPAiChatMessage {\n const id = callId.trim();\n return {\n role: 'tool',\n ...(toolName?.trim() ? { name: toolName.trim() } : {}),\n responses: [\n {\n type: 'agent_result',\n callId: id,\n content,\n },\n ],\n };\n}\n\nexport function axpAiNormalizeHandlerResultToToolBody(handlerResult: unknown): unknown {\n if (handlerResult === undefined || handlerResult === null) {\n return { success: false, error: 'Tool returned no result.' };\n }\n if (typeof handlerResult === 'string') {\n const t = handlerResult.trim();\n if (!t) {\n return { success: false, error: 'Tool returned an empty string.' };\n }\n try {\n return JSON.parse(t) as unknown;\n } catch {\n return { success: true, data: handlerResult };\n }\n }\n if (typeof handlerResult === 'object' && !Array.isArray(handlerResult)) {\n return handlerResult;\n }\n return { success: true, data: handlerResult };\n}\n\nexport function axpAiChatToolOrAgentResultBodyJson(message: AXPAiChatMessage): string {\n const tr = message.responses.find((r) => r.type === 'tool_result' || r.type === 'agent_result');\n if (!tr || (tr.type !== 'tool_result' && tr.type !== 'agent_result')) {\n return '';\n }\n try {\n return JSON.stringify(tr.content);\n } catch {\n return String(tr.content);\n }\n}\n\n/**\n * Compact JSON string of a tool-role message’s `tool_result` body (transcript tail / logs).\n */\nexport function axpAiChatToolResultBodyJson(message: AXPAiChatMessage): string {\n return axpAiChatToolOrAgentResultBodyJson(message);\n}\n\n//#endregion\n\n//#region ---- Supervisor delegated-agent helpers ----\n\nexport function axpAiSupervisorAgentToolName(agentCatalogId: string): string {\n return `${AXPAI_SUPERVISOR_AGENT_TOOL_PREFIX}${agentCatalogId.trim()}`;\n}\n\nexport function axpAiParseSupervisorAgentToolName(toolName: string): string | null {\n const n = toolName.trim();\n if (!n.startsWith(AXPAI_SUPERVISOR_AGENT_TOOL_PREFIX)) {\n return null;\n }\n const id = n.slice(AXPAI_SUPERVISOR_AGENT_TOOL_PREFIX.length).trim();\n return id.length > 0 ? id : null;\n}\n\n//#endregion\n\n//#region ---- Assistant message transforms (delegated sub-run) ----\n\nexport function axpAiMergePlainAssistantTextTurn(messages: AXPAiChatMessage[]): AXPAiChatMessage[] {\n const chunks: string[] = [];\n for (const m of messages) {\n if (m.role !== 'assistant') {\n continue;\n }\n const mergable = m.responses.every((r) => r.type === 'text' || r.type === 'think');\n if (!mergable) {\n continue;\n }\n const textParts = m.responses\n .filter((r): r is AXPAiChatTextResponse => r.type === 'text')\n .map((r) => r.content.trim())\n .filter((s) => s.length > 0);\n const thinkParts = m.responses\n .filter((r): r is AXPAiChatThinkResponse => r.type === 'think')\n .map((r) => r.content.trim())\n .filter((s) => s.length > 0);\n const t =\n textParts.length > 0 ? textParts.join('\\n\\n').trim() : thinkParts.join('\\n\\n').trim();\n if (t.length > 0) {\n chunks.push(t);\n }\n }\n const joined = chunks.join('\\n\\n').trim();\n if (!joined) {\n return [];\n }\n return [axpAiChatTextMessage('assistant', joined)];\n}\n\nexport function axpAiPruneAssistantPiecesToFirstToolOnly(messages: AXPAiChatMessage[]): AXPAiChatMessage[] {\n const out: AXPAiChatMessage[] = [];\n let keptTool = false;\n for (const m of messages) {\n if (m.role !== 'assistant') {\n out.push(m);\n continue;\n }\n const idx = m.responses.findIndex((r) => r.type === 'tool' || r.type === 'agent');\n if (idx < 0) {\n out.push(m);\n continue;\n }\n if (!keptTool) {\n out.push({\n ...m,\n responses: m.responses.slice(0, idx + 1),\n });\n keptTool = true;\n }\n }\n return out;\n}\n\nexport function axpAiChatDelegatedReflectionAssistantMessage(reflectionText: string): AXPAiChatMessage {\n return {\n role: 'assistant',\n delegatedReflection: true,\n responses: [{ type: 'text', content: reflectionText }],\n };\n}\n\nexport function axpAiChatMessageIsDelegatedReflectionExcluded(message: AXPAiChatMessage): boolean {\n return message.delegatedReflection === true;\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { AXTranslationService } from '@acorex/core/translation';\nimport { AXPRegionalSetting, AXPSettingsService } from '@acorex/platform/common';\nimport { AXPPlatformScope } from '@acorex/platform/core';\nimport { AXPSessionService } from '@acorex/platform/auth';\nimport { Injectable, inject } from '@angular/core';\nimport type { AXPAiPlatformRuntimeContext } from './ai-engine.types';\n\n//#endregion\n\n//#region ---- Local time formatting ----\n\n/**\n * Formats {@link now} in {@link ianaTimeZone} for English system prompts; falls back to UTC on invalid zone.\n */\nfunction formatNowForRuntimeContext(now: Date, ianaTimeZone: string | undefined): string {\n const tz = ianaTimeZone?.trim() || 'UTC';\n try {\n return (\n now.toLocaleString('en-US', {\n timeZone: tz,\n dateStyle: 'full',\n timeStyle: 'long',\n }) + ` (${tz})`\n );\n } catch {\n return now.toISOString() + ' (UTC)';\n }\n}\n\n//#endregion\n\n//#region ---- Builder ----\n\n/**\n * Builds {@link AXPAiPlatformRuntimeContext} from session and user-scoped regional settings.\n */\n@Injectable({ providedIn: 'root' })\nexport class AXPAiPlatformRuntimeContextBuilder {\n //#region ---- Services & Dependencies ----\n\n private readonly session = inject(AXPSessionService);\n private readonly settings = inject(AXPSettingsService);\n private readonly translation = inject(AXTranslationService);\n\n //#endregion\n\n //#region ---- Public API ----\n\n /**\n * Resolves current user, tenant, application, UI language, and regional preferences from storage.\n */\n async build(): Promise<AXPAiPlatformRuntimeContext> {\n const user = this.session.user;\n const tenant = this.session.tenant;\n const application = this.session.application;\n const userScope = this.settings.scope(AXPPlatformScope.User);\n\n const [calendarRaw, tzRaw, countryRaw] = await Promise.all([\n userScope.get(AXPRegionalSetting.Calendar),\n userScope.get(AXPRegionalSetting.TimeZone),\n userScope.get(AXPRegionalSetting.Country),\n ]);\n\n const calendarSystem = typeof calendarRaw === 'string' && calendarRaw.trim() ? calendarRaw.trim() : undefined;\n const timeZone = typeof tzRaw === 'string' && tzRaw.trim() ? tzRaw.trim() : undefined;\n const country = typeof countryRaw === 'string' && countryRaw.trim() ? countryRaw.trim() : undefined;\n\n const locale = this.translation.getActiveLang();\n const now = new Date();\n\n return {\n userId: user?.id,\n userDisplayName: [user?.name?.trim(), user?.title?.trim()].find((s) => s && s.length > 0),\n tenantId: tenant?.id,\n tenantTitle: tenant?.title?.trim() || tenant?.name?.trim(),\n applicationId: application?.id,\n applicationTitle: application?.title?.trim() || application?.name?.trim(),\n locale,\n calendarSystem,\n timeZone,\n country,\n currentInstant: now.toISOString(),\n currentLocalDateTime: formatNowForRuntimeContext(now, timeZone),\n };\n }\n\n //#endregion\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { RootConfig } from '../../const';\nimport {\n type AXPFileStorageService,\n AXPFileStorageStatus,\n} from '@acorex/platform/common';\n\n//#endregion\n\n//#region ---- Constants ----\n\n/** Max length for relaying an https image URL in tool_result when persistence fails (CORS, etc.). */\nexport const AI_GENERATED_IMAGE_MAX_REMOTE_URL_IN_TOOL = 2048;\n\n/** refType for files created from in-chat image tool output. */\nexport const AI_CHAT_GENERATED_IMAGE_REF_TYPE = `${RootConfig.module.name}.AiChatGeneratedImage`;\n\n/** refType for files created from in-chat text-to-speech tool output. */\nexport const AI_CHAT_GENERATED_SPEECH_REF_TYPE = `${RootConfig.module.name}.AiChatGeneratedSpeech`;\n\n/** refType for user-attached images in AI chat; {@link persistAiChatAttachmentImage} uses a batch ref id. */\nexport const AI_CHAT_ATTACHMENT_REF_TYPE = `${RootConfig.module.name}.AiChatAttachment`;\n\n/** File storage category for user chat image attachments. */\nexport const AI_CHAT_ATTACHMENT_CATEGORY = 'ai-chat-attachment';\n\n//#endregion\n\n//#region ---- URL / File conversion ----\n\n/**\n * Builds a File from a vendor image URL (https) or data URL (base64 image).\n */\nexport async function blobOrFileFromImageResult(\n imageUrl: string,\n defaultName = 'ai-generated.png',\n): Promise<File> {\n const trimmed = imageUrl.trim();\n if (!trimmed) {\n throw new Error('Image URL is empty.');\n }\n\n if (trimmed.startsWith('data:')) {\n const res = await fetch(trimmed);\n if (!res.ok) {\n throw new Error(`Failed to read data URL (${res.status}).`);\n }\n const blob = await res.blob();\n const mime = blob.type || parseDataUrlMime(trimmed) || 'image/png';\n return new File([blob], defaultName, { type: mime });\n }\n\n if (trimmed.startsWith('https://') || trimmed.startsWith('http://')) {\n const res = await fetch(trimmed);\n if (!res.ok) {\n throw new Error(`Failed to fetch image (${res.status}).`);\n }\n const blob = await res.blob();\n const mime =\n blob.type ||\n res.headers.get('Content-Type')?.split(';')[0]?.trim() ||\n 'image/png';\n const ext = mime.includes('jpeg') || mime.includes('jpg') ? 'jpg' : mime.includes('webp') ? 'webp' : 'png';\n return new File([blob], defaultName.replace(/\\.[^.]+$/, '') + '.' + ext, { type: mime });\n }\n\n throw new Error('Unsupported image URL scheme (expected https: or data:).');\n}\n\nfunction parseDataUrlMime(dataUrl: string): string | undefined {\n const m = /^data:([^;,]+)[;,]/.exec(dataUrl);\n return m?.[1]?.trim();\n}\n\n//#endregion\n\n//#region ---- Persistence ----\n\n/**\n * Saves the file and commits it so it appears in storage queries as committed.\n */\nexport async function persistAiGeneratedImage(\n fileStorage: AXPFileStorageService,\n file: File,\n ref: { refId: string; refType: string },\n): Promise<{ fileId: string }> {\n const info = await fileStorage.save({\n file,\n name: file.name,\n refId: ref.refId,\n refType: ref.refType,\n category: 'ai-generated-image',\n status: AXPFileStorageStatus.Temporary,\n });\n const fileId = info.fileId?.trim();\n if (!fileId) {\n throw new Error('File storage did not return a fileId.');\n }\n await fileStorage.commit(fileId);\n return { fileId };\n}\n\n/**\n * Persists a user-selected chat image; refId groups files uploaded in the same composer batch.\n */\nexport async function persistAiChatAttachmentImage(\n fileStorage: AXPFileStorageService,\n file: File,\n refId: string,\n): Promise<{ fileId: string }> {\n const trimmed = refId.trim();\n if (!trimmed) {\n throw new Error('refId is required for chat attachment persistence.');\n }\n const info = await fileStorage.save({\n file,\n name: file.name,\n refId: trimmed,\n refType: AI_CHAT_ATTACHMENT_REF_TYPE,\n category: AI_CHAT_ATTACHMENT_CATEGORY,\n status: AXPFileStorageStatus.Temporary,\n });\n const fileId = info.fileId?.trim();\n if (!fileId) {\n throw new Error('File storage did not return a fileId.');\n }\n await fileStorage.commit(fileId);\n return { fileId };\n}\n\n/**\n * Saves synthesized speech bytes and commits so the file id can be replayed in chat.\n */\nexport async function persistAiGeneratedSpeech(\n fileStorage: AXPFileStorageService,\n file: File,\n ref: { refId: string; refType: string },\n): Promise<{ fileId: string }> {\n const info = await fileStorage.save({\n file,\n name: file.name,\n refId: ref.refId,\n refType: ref.refType,\n category: 'ai-generated-speech',\n status: AXPFileStorageStatus.Temporary,\n });\n const fileId = info.fileId?.trim();\n if (!fileId) {\n throw new Error('File storage did not return a fileId.');\n }\n await fileStorage.commit(fileId);\n return { fileId };\n}\n\n//#endregion\n","//#region ---- Limits ----\n\n/** Max image file size for AI chat / assist composer attachments (bytes). */\nexport const AXM_AI_CHAT_COMPOSER_MAX_IMAGE_BYTES = 20 * 1024 * 1024;\n\n/** Max images per composer batch (same cap as chat page). */\nexport const AXM_AI_CHAT_COMPOSER_MAX_IMAGES_PER_TURN = 20;\n\n/** Max audio file size (bytes). */\nexport const AXM_AI_CHAT_COMPOSER_MAX_AUDIO_BYTES = 25 * 1024 * 1024;\n\n/** Max audio files per composer batch. */\nexport const AXM_AI_CHAT_COMPOSER_MAX_AUDIO_PER_TURN = 5;\n\n/** Max document file size for PDF / text / office-style attachments (bytes). */\nexport const AXM_AI_CHAT_COMPOSER_MAX_DOCUMENT_BYTES = 35 * 1024 * 1024;\n\n/** Max document files per composer batch. */\nexport const AXM_AI_CHAT_COMPOSER_MAX_DOCUMENTS_PER_TURN = 10;\n\n//#endregion\n\n//#region ---- Patterns ----\n\nconst CHAT_IMAGE_NAME_EXT_PATTERN = /\\.(png|jpe?g|gif|webp|bmp|svg|ico|heic|heif)$/i;\n\nconst CHAT_AUDIO_NAME_EXT_PATTERN = /\\.(mp3|m4a|aac|wav|webm|ogg|opus|flac)$/i;\n\nconst CHAT_DOCUMENT_NAME_EXT_PATTERN =\n /\\.(pdf|txt|md|markdown|csv|tsv|json|jsonl|xml|html?|yaml|yml|log|rtf|docx?|xlsx?|pptx?|odt|ods|odp)$/i;\n\n//#endregion\n\n//#region ---- Public API ----\n\n/**\n * Returns true for normal `image/*` types and for empty/octet-stream when the file name looks like an image.\n */\nexport function axmIsLikelyChatImageFile(file: File): boolean {\n const t = file.type?.trim() ?? '';\n if (t.startsWith('image/')) {\n return true;\n }\n if (t === 'application/octet-stream' || t === '') {\n return CHAT_IMAGE_NAME_EXT_PATTERN.test(file.name);\n }\n return false;\n}\n\n/**\n * Returns true for normal `audio/*` types and for empty/octet-stream when the file name looks like audio.\n */\nexport function axmIsLikelyChatAudioFile(file: File): boolean {\n const t = file.type?.trim() ?? '';\n if (t.startsWith('audio/')) {\n return true;\n }\n if (t === 'application/octet-stream' || t === '') {\n return CHAT_AUDIO_NAME_EXT_PATTERN.test(file.name);\n }\n return false;\n}\n\n/**\n * Returns true for PDF, plain text, common code/markup, CSV, and typical Office/OpenDocument uploads.\n */\nexport function axmIsLikelyChatDocumentFile(file: File): boolean {\n const t = file.type?.trim().toLowerCase() ?? '';\n if (t === 'application/pdf' || t.startsWith('text/')) {\n return true;\n }\n if (\n t === 'application/json' ||\n t === 'application/xml' ||\n t === 'application/javascript' ||\n t === 'application/typescript' ||\n t === 'text/csv' ||\n t === 'application/csv' ||\n t === 'text/tsv' ||\n t === 'application/rtf' ||\n t === 'text/rtf' ||\n t.includes('wordprocessingml') ||\n t.includes('spreadsheetml') ||\n t.includes('presentationml') ||\n t.includes('msword') ||\n t.includes('ms-excel') ||\n t.includes('ms-powerpoint') ||\n t.includes('opendocument')\n ) {\n return true;\n }\n if (t === 'application/octet-stream' || t === '') {\n return CHAT_DOCUMENT_NAME_EXT_PATTERN.test(file.name);\n }\n return false;\n}\n\n/**\n * MIME for storage/API when the browser omits or misreports `file.type` (images and common audio extensions).\n */\nexport function axmMimeTypeForChatAttachment(file: File): string {\n const t = file.type?.trim() ?? '';\n if (t.startsWith('image/')) {\n return t;\n }\n if (t.startsWith('audio/')) {\n return t;\n }\n if (t.startsWith('text/') || t === 'application/pdf' || t === 'application/json' || t === 'application/xml') {\n return t;\n }\n const m = /\\.([^.]+)$/i.exec(file.name);\n const ext = (m?.[1] ?? '').toLowerCase();\n const imageByExt: Record<string, string> = {\n png: 'image/png',\n jpg: 'image/jpeg',\n jpeg: 'image/jpeg',\n gif: 'image/gif',\n webp: 'image/webp',\n bmp: 'image/bmp',\n svg: 'image/svg+xml',\n ico: 'image/x-icon',\n heic: 'image/heic',\n heif: 'image/heif',\n };\n const audioByExt: Record<string, string> = {\n mp3: 'audio/mpeg',\n m4a: 'audio/mp4',\n aac: 'audio/aac',\n wav: 'audio/wav',\n webm: 'audio/webm',\n ogg: 'audio/ogg',\n opus: 'audio/opus',\n flac: 'audio/flac',\n };\n const docByExt: Record<string, string> = {\n pdf: 'application/pdf',\n txt: 'text/plain',\n md: 'text/markdown',\n markdown: 'text/markdown',\n csv: 'text/csv',\n tsv: 'text/tab-separated-values',\n json: 'application/json',\n jsonl: 'application/jsonl',\n xml: 'application/xml',\n html: 'text/html',\n htm: 'text/html',\n yaml: 'text/yaml',\n yml: 'text/yaml',\n log: 'text/plain',\n rtf: 'application/rtf',\n doc: 'application/msword',\n docx: 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',\n xls: 'application/vnd.ms-excel',\n xlsx: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',\n ppt: 'application/vnd.ms-powerpoint',\n pptx: 'application/vnd.openxmlformats-officedocument.presentationml.presentation',\n odt: 'application/vnd.oasis.opendocument.text',\n ods: 'application/vnd.oasis.opendocument.spreadsheet',\n odp: 'application/vnd.oasis.opendocument.presentation',\n };\n return imageByExt[ext] ?? audioByExt[ext] ?? docByExt[ext] ?? 'application/octet-stream';\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { AXDataSource, AXValueChangedEvent } from '@acorex/cdk/common';\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXFormModule } from '@acorex/components/form';\nimport { AXLabelModule } from '@acorex/components/label';\nimport { AXSelectBoxModule } from '@acorex/components/select-box';\nimport { AXTextAreaModule } from '@acorex/components/text-area';\nimport { AXToastService } from '@acorex/components/toast';\nimport { AXFileService } from '@acorex/core/file';\nimport { AXTranslationModule, AXTranslationService } from '@acorex/core/translation';\nimport { AXPFileStorageService } from '@acorex/platform/common';\nimport type {\n AXPAiAssistPickerRow,\n AXPAiAssistPromptSubmitPayload,\n AXPAiAssistRunResult,\n AXPAiAssistUserMediaAttachment,\n} from '../../../ai-assist.types';\nimport { persistAiChatAttachmentImage } from '../../image/ai-generated-image-persist';\nimport {\n AXM_AI_CHAT_COMPOSER_MAX_AUDIO_BYTES,\n AXM_AI_CHAT_COMPOSER_MAX_AUDIO_PER_TURN,\n AXM_AI_CHAT_COMPOSER_MAX_DOCUMENT_BYTES,\n AXM_AI_CHAT_COMPOSER_MAX_DOCUMENTS_PER_TURN,\n AXM_AI_CHAT_COMPOSER_MAX_IMAGE_BYTES,\n AXM_AI_CHAT_COMPOSER_MAX_IMAGES_PER_TURN,\n axmIsLikelyChatAudioFile,\n axmIsLikelyChatDocumentFile,\n axmIsLikelyChatImageFile,\n axmMimeTypeForChatAttachment,\n} from '../ai-chat-composer-media.helpers';\nimport { CommonModule, isPlatformBrowser } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n OnDestroy,\n OnInit,\n PLATFORM_ID,\n ViewEncapsulation,\n computed,\n inject,\n input,\n signal,\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\n\n//#endregion\n\n//#region ---- Draft types ----\n\ninterface AXMAiAssistDraftImage {\n clientId: string;\n previewUrl: string;\n mimeType: string;\n name?: string;\n fileId?: string;\n}\n\ninterface AXMAiAssistDraftAudio {\n clientId: string;\n mimeType: string;\n name?: string;\n fileId?: string;\n}\n\ninterface AXMAiAssistDraftFile {\n clientId: string;\n mimeType: string;\n name?: string;\n fileId?: string;\n}\n\n//#endregion\n\n//#region ---- Component ----\n\n/**\n * Bottom-sheet UI for AI assist: prompt text, optional assist/agent target, and image/audio/document attachments like the chat composer.\n */\n@Component({\n selector: 'axm-ai-assist-prompt-bottom-panel',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n templateUrl: './ai-assist-prompt-bottom-panel.component.html',\n styleUrl: './ai-assist-prompt-bottom-panel.component.scss',\n imports: [\n CommonModule,\n FormsModule,\n AXButtonModule,\n AXFormModule,\n AXLabelModule,\n AXSelectBoxModule,\n AXTextAreaModule,\n AXTranslationModule,\n ],\n})\nexport class AXMAiAssistPromptBottomPanelComponent implements OnInit, OnDestroy {\n //#region ---- Services & Dependencies ----\n\n private readonly toastService = inject(AXToastService);\n private readonly translation = inject(AXTranslationService);\n private readonly fileStorage = inject(AXPFileStorageService);\n private readonly fileService = inject(AXFileService);\n private readonly platformId = inject(PLATFORM_ID);\n\n //#endregion\n\n //#region ---- Inputs ----\n\n readonly title = input.required<string>();\n\n readonly placeholder = input<string>('');\n\n readonly initialPrompt = input<string>('');\n\n readonly contentMaxWidthPx = input<number>(640);\n\n readonly assistPickerRows = input<AXPAiAssistPickerRow[]>([]);\n\n readonly agentPickerRows = input<AXPAiAssistPickerRow[]>([]);\n\n readonly initialAssistId = input<string | undefined>(undefined);\n\n readonly initialDirectAgentId = input<string | undefined>(undefined);\n\n readonly runPrompt = input.required<(payload: AXPAiAssistPromptSubmitPayload) => Promise<AXPAiAssistRunResult>>();\n\n readonly requestClose = input.required<(result: AXPAiAssistRunResult | null) => void>();\n\n //#endregion\n\n //#region ---- State ----\n\n readonly promptDraft = signal('');\n\n readonly busy = signal(false);\n\n readonly isComposerSaving = signal(false);\n\n readonly draftAttachmentGroupId = signal<string | null>(null);\n\n readonly draftComposerImages = signal<AXMAiAssistDraftImage[]>([]);\n\n readonly draftComposerAudios = signal<AXMAiAssistDraftAudio[]>([]);\n\n readonly draftComposerFiles = signal<AXMAiAssistDraftFile[]>([]);\n\n readonly assistTargetKey = signal('');\n\n readonly defaultAssistLabel = signal('');\n\n readonly assistRowPrefix = signal('');\n\n readonly agentRowPrefix = signal('');\n\n //#endregion\n\n //#region ---- Computed ----\n\n readonly assistSelectItems = computed(() => {\n const def = this.defaultAssistLabel() || '…';\n const ap = this.assistRowPrefix();\n const ag = this.agentRowPrefix();\n const items: { value: string; text: string }[] = [{ value: '', text: def }];\n for (const r of this.assistPickerRows()) {\n const id = r.id?.trim();\n if (!id) {\n continue;\n }\n items.push({ value: `assist:${id}`, text: `${ap} ${r.title}`.trim() });\n }\n for (const r of this.agentPickerRows()) {\n const id = r.id?.trim();\n if (!id) {\n continue;\n }\n items.push({ value: `agent:${id}`, text: `${ag} ${r.title}`.trim() });\n }\n return items;\n });\n\n readonly assistSelectDataSource = computed(\n () =>\n new AXDataSource({\n key: 'value',\n pageSize: 100,\n load: () => {\n const list = this.assistSelectItems();\n return Promise.resolve({ items: list, total: list.length });\n },\n byKey: (id: unknown) => {\n const list = this.assistSelectItems();\n const item = list.find((c) => c.value === (id as string));\n return Promise.resolve(item);\n },\n }),\n );\n\n readonly canSend = computed(() => {\n if (this.busy() || this.isComposerSaving()) {\n return false;\n }\n const textOk = this.promptDraft().trim().length > 0;\n const draftImg = this.draftComposerImages();\n const draftAud = this.draftComposerAudios();\n const draftFiles = this.draftComposerFiles();\n const allImagesSaved = draftImg.length === 0 || draftImg.every((s) => Boolean(s.fileId?.trim()));\n const allAudiosSaved = draftAud.length === 0 || draftAud.every((s) => Boolean(s.fileId?.trim()));\n const allFilesSaved = draftFiles.length === 0 || draftFiles.every((s) => Boolean(s.fileId?.trim()));\n if (!allImagesSaved || !allAudiosSaved || !allFilesSaved) {\n return false;\n }\n if (draftImg.length === 0 && draftAud.length === 0 && draftFiles.length === 0) {\n return textOk;\n }\n return textOk || draftImg.length > 0 || draftAud.length > 0 || draftFiles.length > 0;\n });\n\n //#endregion\n\n //#region ---- Lifecycle ----\n\n async ngOnInit(): Promise<void> {\n this.promptDraft.set(this.initialPrompt().trim());\n const [def, ap, ag] = await Promise.all([\n this.translation.translateAsync('@ai-management:chat.select-assist'),\n this.translation.translateAsync('@ai-management:chat.picker-assist-prefix'),\n this.translation.translateAsync('@ai-management:chat.picker-agent-prefix'),\n ]);\n this.defaultAssistLabel.set(def);\n this.assistRowPrefix.set(ap);\n this.agentRowPrefix.set(ag);\n\n const d = this.initialDirectAgentId()?.trim();\n const a = this.initialAssistId()?.trim();\n if (d) {\n this.assistTargetKey.set(`agent:${d}`);\n } else if (a) {\n this.assistTargetKey.set(`assist:${a}`);\n } else {\n this.assistTargetKey.set('');\n }\n }\n\n ngOnDestroy(): void {\n for (const s of this.draftComposerImages()) {\n URL.revokeObjectURL(s.previewUrl);\n }\n }\n\n //#endregion\n\n //#region ---- UI Handlers ----\n\n onAssistTargetChanged(e: AXValueChangedEvent<string>): void {\n if (!e.isUserInteraction) {\n return;\n }\n this.assistTargetKey.set(String(e.value ?? ''));\n }\n\n onPromptDraftChange(value: string | null | undefined): void {\n this.promptDraft.set((value ?? '').toString());\n }\n\n onCancel(): void {\n this.requestClose()(null);\n }\n\n openImagePicker(): void {\n void this.pickComposerImages();\n }\n\n openAudioPicker(): void {\n void this.pickComposerAudios();\n }\n\n openDocumentPicker(): void {\n void this.pickComposerDocuments();\n }\n\n async onSend(): Promise<void> {\n if (!this.canSend()) {\n return;\n }\n const text = this.promptDraft().trim();\n const draftImg = this.draftComposerImages();\n const draftAud = this.draftComposerAudios();\n const draftFiles = this.draftComposerFiles();\n for (const s of draftImg) {\n if (!s.fileId?.trim()) {\n const errTitle = await this.translation.translateAsync('@general:messages.error.title');\n const msg = await this.translation.translateAsync('@ai-management:chat.images-still-saving');\n await this.toastService.show({ color: 'warning', title: errTitle, content: msg });\n return;\n }\n }\n for (const s of draftAud) {\n if (!s.fileId?.trim()) {\n const errTitle = await this.translation.translateAsync('@general:messages.error.title');\n const msg = await this.translation.translateAsync('@ai-management:chat.audio-still-saving');\n await this.toastService.show({ color: 'warning', title: errTitle, content: msg });\n return;\n }\n }\n for (const s of draftFiles) {\n if (!s.fileId?.trim()) {\n const errTitle = await this.translation.translateAsync('@general:messages.error.title');\n const msg = await this.translation.translateAsync('@ai-management:chat.documents-still-saving');\n await this.toastService.show({ color: 'warning', title: errTitle, content: msg });\n return;\n }\n }\n\n const key = this.assistTargetKey().trim();\n let assistId: string | undefined;\n let directAgentId: string | undefined;\n if (key.startsWith('assist:')) {\n assistId = key.slice('assist:'.length).trim() || undefined;\n } else if (key.startsWith('agent:')) {\n directAgentId = key.slice('agent:'.length).trim() || undefined;\n }\n\n const userMediaAttachments: AXPAiAssistUserMediaAttachment[] = [\n ...draftImg.map((s) => ({\n kind: 'image' as const,\n fileId: s.fileId!.trim(),\n mimeType: s.mimeType.trim(),\n ...(s.name?.trim() ? { name: s.name.trim() } : {}),\n })),\n ...draftAud.map((s) => ({\n kind: 'audio' as const,\n fileId: s.fileId!.trim(),\n mimeType: s.mimeType.trim(),\n ...(s.name?.trim() ? { name: s.name.trim() } : {}),\n })),\n ...draftFiles.map((s) => ({\n kind: 'file' as const,\n fileId: s.fileId!.trim(),\n mimeType: s.mimeType.trim(),\n ...(s.name?.trim() ? { name: s.name.trim() } : {}),\n })),\n ];\n\n const payload: AXPAiAssistPromptSubmitPayload = {\n prompt: text,\n assistId,\n directAgentId,\n userMediaAttachments,\n };\n\n this.busy.set(true);\n try {\n const result = await this.runPrompt()(payload);\n this.requestClose()(result);\n } catch (err) {\n const errTitle = await this.translation.translateAsync('@general:messages.error.title');\n const fallback = await this.translation.translateAsync('@ai-management:assist-popup.run-error');\n const content = err instanceof Error ? err.message : fallback;\n await this.toastService.show({ color: 'danger', title: errTitle, content });\n } finally {\n this.busy.set(false);\n }\n }\n\n removeDraftImage(clientId: string): void {\n const id = clientId.trim();\n if (!id) {\n return;\n }\n this.draftComposerImages.update((prev) => {\n const slot = prev.find((s) => s.clientId === id);\n if (slot) {\n URL.revokeObjectURL(slot.previewUrl);\n }\n const next = prev.filter((s) => s.clientId !== id);\n if (\n next.length === 0 &&\n this.draftComposerAudios().length === 0 &&\n this.draftComposerFiles().length === 0\n ) {\n this.draftAttachmentGroupId.set(null);\n }\n return next;\n });\n }\n\n removeDraftAudio(clientId: string): void {\n const id = clientId.trim();\n if (!id) {\n return;\n }\n this.draftComposerAudios.update((prev) => {\n const next = prev.filter((s) => s.clientId !== id);\n if (\n next.length === 0 &&\n this.draftComposerImages().length === 0 &&\n this.draftComposerFiles().length === 0\n ) {\n this.draftAttachmentGroupId.set(null);\n }\n return next;\n });\n }\n\n removeDraftFile(clientId: string): void {\n const id = clientId.trim();\n if (!id) {\n return;\n }\n this.draftComposerFiles.update((prev) => {\n const next = prev.filter((s) => s.clientId !== id);\n if (\n next.length === 0 &&\n this.draftComposerImages().length === 0 &&\n this.draftComposerAudios().length === 0\n ) {\n this.draftAttachmentGroupId.set(null);\n }\n return next;\n });\n }\n\n //#endregion\n\n //#region ---- Composer media (mirrors chat page) ----\n\n private async pickComposerImages(): Promise<void> {\n if (!isPlatformBrowser(this.platformId)) {\n return;\n }\n if (this.busy() || this.isComposerSaving()) {\n return;\n }\n try {\n const files = await this.fileService.choose({\n multiple: true,\n accept: 'image/*',\n });\n if (files.length === 0) {\n return;\n }\n await this.processComposerImageFiles(files);\n } catch {\n /* user cancelled */\n }\n }\n\n private async pickComposerAudios(): Promise<void> {\n if (!isPlatformBrowser(this.platformId)) {\n return;\n }\n if (this.busy() || this.isComposerSaving()) {\n return;\n }\n try {\n const files = await this.fileService.choose({\n multiple: true,\n accept: 'audio/*',\n });\n if (files.length === 0) {\n return;\n }\n await this.processComposerAudioFiles(files);\n } catch {\n /* user cancelled */\n }\n }\n\n private async pickComposerDocuments(): Promise<void> {\n if (!isPlatformBrowser(this.platformId)) {\n return;\n }\n if (this.busy() || this.isComposerSaving()) {\n return;\n }\n try {\n const files = await this.fileService.choose({\n multiple: true,\n accept:\n '.pdf,.txt,.md,.csv,.tsv,.json,.jsonl,.xml,.html,.htm,.yaml,.yml,.log,.rtf,.doc,.docx,.xls,.xlsx,.ppt,.pptx,.odt,.ods,.odp,application/pdf,text/*,application/json',\n });\n if (files.length === 0) {\n return;\n }\n await this.processComposerDocumentFiles(files);\n } catch {\n /* user cancelled */\n }\n }\n\n private async processComposerImageFiles(files: File[]): Promise<void> {\n if (!isPlatformBrowser(this.platformId)) {\n return;\n }\n let groupId = this.draftAttachmentGroupId();\n if (!groupId?.trim()) {\n groupId = globalThis.crypto.randomUUID();\n this.draftAttachmentGroupId.set(groupId);\n }\n const gid = groupId.trim();\n\n const existing = this.draftComposerImages().length;\n if (existing + files.length > AXM_AI_CHAT_COMPOSER_MAX_IMAGES_PER_TURN) {\n await this.showUploadWarning('@ai-management:chat.upload-too-many');\n return;\n }\n\n const newSlots: AXMAiAssistDraftImage[] = [];\n const filesForPersist: File[] = [];\n\n for (const file of files) {\n if (!axmIsLikelyChatImageFile(file)) {\n await this.showUploadWarning('@ai-management:chat.upload-invalid-type');\n return;\n }\n if (file.size > AXM_AI_CHAT_COMPOSER_MAX_IMAGE_BYTES) {\n await this.showUploadWarning('@ai-management:chat.upload-too-large');\n return;\n }\n const mimeType = axmMimeTypeForChatAttachment(file);\n const fileForStorage =\n file.type.trim().startsWith('image/') && file.type.trim().length > 0\n ? file\n : new File([file], file.name, { type: mimeType });\n newSlots.push({\n clientId: globalThis.crypto.randomUUID(),\n previewUrl: URL.createObjectURL(file),\n mimeType,\n name: file.name,\n });\n filesForPersist.push(fileForStorage);\n }\n\n this.draftComposerImages.update((prev) => [...prev, ...newSlots]);\n\n this.isComposerSaving.set(true);\n try {\n for (let i = 0; i < filesForPersist.length; i++) {\n const file = filesForPersist[i];\n const clientId = newSlots[i].clientId;\n try {\n const { fileId } = await persistAiChatAttachmentImage(this.fileStorage, file, gid);\n this.draftComposerImages.update((prev) =>\n prev.map((s) => (s.clientId === clientId ? { ...s, fileId } : s)),\n );\n } catch (e) {\n const msg = e instanceof Error ? e.message : String(e);\n this.draftComposerImages.update((prev) => {\n const slot = prev.find((s) => s.clientId === clientId);\n if (slot) {\n URL.revokeObjectURL(slot.previewUrl);\n }\n return prev.filter((s) => s.clientId !== clientId);\n });\n if (\n this.draftComposerImages().length === 0 &&\n this.draftComposerAudios().length === 0 &&\n this.draftComposerFiles().length === 0\n ) {\n this.draftAttachmentGroupId.set(null);\n }\n const errTitle = await this.translation.translateAsync('@general:messages.error.title');\n const uploadFailed = await this.translation.translateAsync('@ai-management:chat.upload-error');\n await this.toastService.show({\n color: 'danger',\n title: errTitle,\n content: `${uploadFailed} ${msg}`,\n });\n return;\n }\n }\n } finally {\n this.isComposerSaving.set(false);\n }\n }\n\n private async processComposerAudioFiles(files: File[]): Promise<void> {\n if (!isPlatformBrowser(this.platformId)) {\n return;\n }\n let groupId = this.draftAttachmentGroupId();\n if (!groupId?.trim()) {\n groupId = globalThis.crypto.randomUUID();\n this.draftAttachmentGroupId.set(groupId);\n }\n const gid = groupId.trim();\n\n const existing = this.draftComposerAudios().length;\n if (existing + files.length > AXM_AI_CHAT_COMPOSER_MAX_AUDIO_PER_TURN) {\n await this.showUploadWarning('@ai-management:chat.upload-audio-too-many');\n return;\n }\n\n const newSlots: AXMAiAssistDraftAudio[] = [];\n const filesForPersist: File[] = [];\n\n for (const file of files) {\n if (!axmIsLikelyChatAudioFile(file)) {\n await this.showUploadWarning('@ai-management:chat.upload-audio-invalid-type');\n return;\n }\n if (file.size > AXM_AI_CHAT_COMPOSER_MAX_AUDIO_BYTES) {\n await this.showUploadWarning('@ai-management:chat.upload-audio-too-large');\n return;\n }\n const mimeType = axmMimeTypeForChatAttachment(file);\n const fileForStorage =\n file.type.trim().startsWith('audio/') && file.type.trim().length > 0\n ? file\n : new File([file], file.name, { type: mimeType });\n newSlots.push({\n clientId: globalThis.crypto.randomUUID(),\n mimeType,\n name: file.name,\n });\n filesForPersist.push(fileForStorage);\n }\n\n this.draftComposerAudios.update((prev) => [...prev, ...newSlots]);\n\n this.isComposerSaving.set(true);\n try {\n for (let i = 0; i < filesForPersist.length; i++) {\n const file = filesForPersist[i];\n const clientId = newSlots[i].clientId;\n try {\n const { fileId } = await persistAiChatAttachmentImage(this.fileStorage, file, gid);\n this.draftComposerAudios.update((prev) =>\n prev.map((s) => (s.clientId === clientId ? { ...s, fileId } : s)),\n );\n } catch (e) {\n const msg = e instanceof Error ? e.message : String(e);\n this.draftComposerAudios.update((prev) => prev.filter((s) => s.clientId !== clientId));\n if (\n this.draftComposerAudios().length === 0 &&\n this.draftComposerImages().length === 0 &&\n this.draftComposerFiles().length === 0\n ) {\n this.draftAttachmentGroupId.set(null);\n }\n const errTitle = await this.translation.translateAsync('@general:messages.error.title');\n const uploadFailed = await this.translation.translateAsync('@ai-management:chat.upload-audio-error');\n await this.toastService.show({\n color: 'danger',\n title: errTitle,\n content: `${uploadFailed} ${msg}`,\n });\n return;\n }\n }\n } finally {\n this.isComposerSaving.set(false);\n }\n }\n\n private async processComposerDocumentFiles(files: File[]): Promise<void> {\n if (!isPlatformBrowser(this.platformId)) {\n return;\n }\n let groupId = this.draftAttachmentGroupId();\n if (!groupId?.trim()) {\n groupId = globalThis.crypto.randomUUID();\n this.draftAttachmentGroupId.set(groupId);\n }\n const gid = groupId.trim();\n\n const existing = this.draftComposerFiles().length;\n if (existing + files.length > AXM_AI_CHAT_COMPOSER_MAX_DOCUMENTS_PER_TURN) {\n await this.showUploadWarning('@ai-management:chat.upload-documents-too-many');\n return;\n }\n\n const newSlots: AXMAiAssistDraftFile[] = [];\n const filesForPersist: File[] = [];\n\n for (const file of files) {\n if (!axmIsLikelyChatDocumentFile(file)) {\n await this.showUploadWarning('@ai-management:chat.upload-documents-invalid-type');\n return;\n }\n if (file.size > AXM_AI_CHAT_COMPOSER_MAX_DOCUMENT_BYTES) {\n await this.showUploadWarning('@ai-management:chat.upload-documents-too-large');\n return;\n }\n const mimeType = axmMimeTypeForChatAttachment(file);\n const fileForStorage =\n file.type.trim().length > 0 && file.type.trim() !== 'application/octet-stream'\n ? file\n : new File([file], file.name, { type: mimeType });\n newSlots.push({\n clientId: globalThis.crypto.randomUUID(),\n mimeType,\n name: file.name,\n });\n filesForPersist.push(fileForStorage);\n }\n\n this.draftComposerFiles.update((prev) => [...prev, ...newSlots]);\n\n this.isComposerSaving.set(true);\n try {\n for (let i = 0; i < filesForPersist.length; i++) {\n const file = filesForPersist[i];\n const clientId = newSlots[i].clientId;\n try {\n const { fileId } = await persistAiChatAttachmentImage(this.fileStorage, file, gid);\n this.draftComposerFiles.update((prev) =>\n prev.map((s) => (s.clientId === clientId ? { ...s, fileId } : s)),\n );\n } catch (e) {\n const msg = e instanceof Error ? e.message : String(e);\n this.draftComposerFiles.update((prev) => prev.filter((s) => s.clientId !== clientId));\n if (\n this.draftComposerFiles().length === 0 &&\n this.draftComposerImages().length === 0 &&\n this.draftComposerAudios().length === 0\n ) {\n this.draftAttachmentGroupId.set(null);\n }\n const errTitle = await this.translation.translateAsync('@general:messages.error.title');\n const uploadFailed = await this.translation.translateAsync('@ai-management:chat.upload-documents-error');\n await this.toastService.show({\n color: 'danger',\n title: errTitle,\n content: `${uploadFailed} ${msg}`,\n });\n return;\n }\n }\n } finally {\n this.isComposerSaving.set(false);\n }\n }\n\n private async showUploadWarning(translationKey: string): Promise<void> {\n const errTitle = await this.translation.translateAsync('@general:messages.error.title');\n const content = await this.translation.translateAsync(translationKey);\n await this.toastService.show({ color: 'warning', title: errTitle, content });\n }\n\n //#endregion\n}\n\n//#endregion\n","<div\n class=\"axm-ai-assist-prompt-bottom-panel ax-flex ax-flex-col ax-gap-4 ax-min-h-0 ax-lightest-surface ax-border-t ax-shadow-lg ax-p-4\"\n [style.max-width.px]=\"contentMaxWidthPx()\"\n>\n <h3 class=\"ax-text-base ax-font-semibold ax-text-on-lightest-surface ax-m-0 ax-shrink-0\">{{ title() }}</h3>\n\n @if (assistPickerRows().length + agentPickerRows().length > 0) {\n <ax-form-field class=\"ax-shrink-0\">\n <ax-label>{{ '@ai-management:chat.chat-target-label' | translate | async }}</ax-label>\n <ax-select-box\n textField=\"text\"\n valueField=\"value\"\n [dataSource]=\"assistSelectDataSource()\"\n [ngModel]=\"assistTargetKey()\"\n (onValueChanged)=\"onAssistTargetChanged($event)\"\n ></ax-select-box>\n </ax-form-field>\n }\n\n @if (draftComposerImages().length > 0 || draftComposerAudios().length > 0 || draftComposerFiles().length > 0 || isComposerSaving()) {\n <div\n class=\"ax-shrink-0 ax-rounded-lg ax-border ax-border-default/70 dark:ax-border-darker ax-bg-default-50/80 dark:ax-bg-default-100/40 ax-p-2 ax-flex ax-flex-col ax-gap-2\"\n [attr.aria-label]=\"('@ai-management:chat.composer-attachments-region' | translate | async) ?? ''\"\n >\n <div class=\"ax-flex ax-flex-wrap ax-items-center ax-justify-between ax-gap-2 ax-text-xs ax-text-muted\">\n <span>\n @if (isComposerSaving()) {\n {{ '@ai-management:chat.composer-uploading' | translate | async }}\n } @else {\n @if (draftComposerImages().length > 0) {\n <span>{{ draftComposerImages().length }} {{ '@ai-management:chat.composer-images-count' | translate | async }}</span>\n }\n @if (draftComposerImages().length > 0 && draftComposerAudios().length > 0) {\n <span class=\"ax-mx-1\">·</span>\n }\n @if (draftComposerAudios().length > 0) {\n <span>{{ draftComposerAudios().length }} {{ '@ai-management:chat.composer-audio-count' | translate | async }}</span>\n }\n @if (draftComposerFiles().length > 0) {\n @if (draftComposerImages().length > 0 || draftComposerAudios().length > 0) {\n <span class=\"ax-mx-1\">·</span>\n }\n <span>{{ draftComposerFiles().length }} {{ '@ai-management:chat.composer-documents-count' | translate | async }}</span>\n }\n }\n </span>\n </div>\n @if (draftComposerImages().length > 0) {\n <div class=\"ax-flex ax-flex-wrap ax-gap-2\">\n @for (slot of draftComposerImages(); track slot.clientId) {\n <div\n class=\"ax-relative ax-h-16 ax-w-16 ax-shrink-0 ax-overflow-hidden ax-rounded-md ax-border ax-border-default/60 dark:ax-border-darker ax-bg-lightest\"\n >\n <img [src]=\"slot.previewUrl\" [alt]=\"slot.name ?? ''\" class=\"ax-h-full ax-w-full ax-object-cover\" />\n @if (!slot.fileId) {\n <span\n class=\"ax-absolute ax-inset-0 ax-flex ax-items-center ax-justify-center ax-bg-default/40 ax-text-[0.65rem] ax-font-medium ax-text-on-lightest\"\n >…</span\n >\n }\n <button\n type=\"button\"\n class=\"ax-absolute ax-end-0.5 ax-top-0.5 ax-flex ax-h-5 ax-w-5 ax-items-center ax-justify-center ax-rounded ax-bg-default/80 ax-text-[0.7rem] ax-leading-none ax-text-on-lightest hover:ax-bg-default focus-visible:ax-outline-none focus-visible:ax-ring-2 focus-visible:ax-ring-primary-400\"\n [disabled]=\"busy() || isComposerSaving()\"\n [attr.aria-label]=\"('@ai-management:chat.remove-draft-image' | translate | async) ?? ''\"\n (click)=\"removeDraftImage(slot.clientId)\"\n >\n ×\n </button>\n </div>\n }\n </div>\n }\n @if (draftComposerAudios().length > 0) {\n <div class=\"ax-flex ax-flex-col ax-gap-1\">\n @for (slot of draftComposerAudios(); track slot.clientId) {\n <div\n class=\"ax-flex ax-items-center ax-justify-between ax-gap-2 ax-rounded ax-border ax-border-default/60 dark:ax-border-darker ax-bg-lightest ax-px-2 ax-py-1.5 ax-text-xs ax-min-w-0\"\n >\n <span class=\"ax-truncate ax-text-on-lightest\" [attr.title]=\"slot.name ?? ''\">\n {{ '@ai-management:chat.attached-audio-label' | translate | async }}:\n {{ slot.name?.trim() || ('@ai-management:chat.audio-untitled' | translate | async) }}\n </span>\n @if (!slot.fileId) {\n <span class=\"ax-text-muted ax-shrink-0\">…</span>\n }\n <button\n type=\"button\"\n class=\"ax-shrink-0 ax-flex ax-h-6 ax-w-6 ax-items-center ax-justify-center ax-rounded ax-bg-default/80 ax-text-[0.85rem] ax-leading-none ax-text-on-lightest hover:ax-bg-default focus-visible:ax-outline-none focus-visible:ax-ring-2 focus-visible:ax-ring-primary-400\"\n [disabled]=\"busy() || isComposerSaving()\"\n [attr.aria-label]=\"('@ai-management:chat.remove-draft-audio' | translate | async) ?? ''\"\n (click)=\"removeDraftAudio(slot.clientId)\"\n >\n ×\n </button>\n </div>\n }\n </div>\n }\n @if (draftComposerFiles().length > 0) {\n <div class=\"ax-flex ax-flex-col ax-gap-1\">\n @for (slot of draftComposerFiles(); track slot.clientId) {\n <div\n class=\"ax-flex ax-items-center ax-justify-between ax-gap-2 ax-rounded ax-border ax-border-default/60 dark:ax-border-darker ax-bg-lightest ax-px-2 ax-py-1.5 ax-text-xs ax-min-w-0\"\n >\n <span class=\"ax-truncate ax-text-on-lightest\" [attr.title]=\"slot.name ?? ''\">\n {{ '@ai-management:chat.attached-document-label' | translate | async }}:\n {{ slot.name?.trim() || ('@ai-management:chat.document-untitled' | translate | async) }}\n </span>\n @if (!slot.fileId) {\n <span class=\"ax-text-muted ax-shrink-0\">…</span>\n }\n <button\n type=\"button\"\n class=\"ax-shrink-0 ax-flex ax-h-6 ax-w-6 ax-items-center ax-justify-center ax-rounded ax-bg-default/80 ax-text-[0.85rem] ax-leading-none ax-text-on-lightest hover:ax-bg-default focus-visible:ax-outline-none focus-visible:ax-ring-2 focus-visible:ax-ring-primary-400\"\n [disabled]=\"busy() || isComposerSaving()\"\n [attr.aria-label]=\"('@ai-management:chat.remove-draft-document' | translate | async) ?? ''\"\n (click)=\"removeDraftFile(slot.clientId)\"\n >\n ×\n </button>\n </div>\n }\n </div>\n }\n </div>\n }\n\n <div class=\"axm-ai-assist-prompt-bottom-panel__body ax-flex ax-flex-col ax-gap-4\">\n <ax-form-field>\n <ax-text-area\n [rows]=\"6\"\n [disabled]=\"busy()\"\n [ngModel]=\"promptDraft()\"\n (ngModelChange)=\"onPromptDraftChange($event)\"\n [placeholder]=\"\n placeholder().trim().length > 0\n ? placeholder()\n : ((('@ai-management:assist-popup.placeholder' | translate | async) ?? ''))\n \"\n ></ax-text-area>\n </ax-form-field>\n </div>\n\n <div class=\"ax-flex ax-flex-col ax-gap-2 sm:ax-flex-row sm:ax-items-center sm:ax-justify-between ax-shrink-0 ax-pt-1\">\n <div class=\"ax-inline-flex ax-w-full ax-min-h-10 sm:ax-w-auto sm:ax-shrink-0 ax-flex-wrap ax-gap-2\">\n <ax-button\n class=\"ax-w-full sm:ax-w-auto\"\n look=\"outline\"\n color=\"secondary\"\n type=\"button\"\n [disabled]=\"busy() || isComposerSaving()\"\n [text]=\"('@ai-management:chat.upload-images' | translate | async) ?? ''\"\n [attr.aria-label]=\"('@ai-management:chat.upload-images-aria' | translate | async) ?? ''\"\n (onClick)=\"openImagePicker()\"\n ></ax-button>\n <ax-button\n class=\"ax-w-full sm:ax-w-auto\"\n look=\"outline\"\n color=\"secondary\"\n type=\"button\"\n [disabled]=\"busy() || isComposerSaving()\"\n [text]=\"('@ai-management:chat.upload-audio' | translate | async) ?? ''\"\n [attr.aria-label]=\"('@ai-management:chat.upload-audio-aria' | translate | async) ?? ''\"\n (onClick)=\"openAudioPicker()\"\n ></ax-button>\n <ax-button\n class=\"ax-w-full sm:ax-w-auto\"\n look=\"outline\"\n color=\"secondary\"\n type=\"button\"\n [disabled]=\"busy() || isComposerSaving()\"\n [text]=\"('@ai-management:chat.upload-documents' | translate | async) ?? ''\"\n [attr.aria-label]=\"('@ai-management:chat.upload-documents-aria' | translate | async) ?? ''\"\n (onClick)=\"openDocumentPicker()\"\n ></ax-button>\n </div>\n <div class=\"ax-flex ax-flex-wrap ax-items-center ax-justify-end ax-gap-2 ax-w-full sm:ax-w-auto\">\n <ax-button\n look=\"outline\"\n color=\"secondary\"\n type=\"button\"\n [disabled]=\"busy()\"\n [text]=\"('@ai-management:assist-popup.cancel' | translate | async) ?? ''\"\n (onClick)=\"onCancel()\"\n ></ax-button>\n <ax-button\n color=\"primary\"\n type=\"button\"\n [disabled]=\"busy() || !canSend()\"\n [text]=\"\n busy()\n ? (('@ai-management:assist-popup.sending' | translate | async) ?? '')\n : (('@ai-management:assist-popup.send' | translate | async) ?? '')\n \"\n (onClick)=\"onSend()\"\n ></ax-button>\n </div>\n </div>\n</div>\n","//#region ---- Imports ----\n\nimport type {\n AXPAiAssistPickerRow,\n AXPAiAssistPromptSubmitPayload,\n AXPAiAssistRunResult,\n AXPAiAssistShowOptions,\n} from '../../ai-assist.types';\nimport { AXMAiAssistPromptBottomPanelComponent } from './ai-assist-prompt-bottom-panel/ai-assist-prompt-bottom-panel.component';\nimport { AXOverlayService, type AXOverlayRef } from '@acorex/cdk/overlay';\nimport { Injectable, inject } from '@angular/core';\n\n//#endregion\n\n//#region ---- Size → content width ----\n\nfunction contentMaxWidthPxForAssistSurface(size: NonNullable<AXPAiAssistShowOptions['size']>): number {\n switch (size) {\n case 'sm':\n return 400;\n case 'md':\n return 560;\n case 'lg':\n return 720;\n case 'xl':\n return 960;\n case 'full':\n return Math.max(360, Math.min(window.innerWidth - 24, 1200));\n default:\n return 560;\n }\n}\n\n//#endregion\n\n//#region ---- Service ----\n\n/**\n * Opens the AI assist prompt in a bottom overlay using {@link AXOverlayService} (`centered: false`, panel CSS).\n */\n@Injectable({ providedIn: 'root' })\nexport class AXMAiAssistPromptBottomPanelService {\n //#region ---- Services & Dependencies ----\n\n private readonly overlayService = inject(AXOverlayService);\n\n //#endregion\n\n //#region ---- Private Properties ----\n\n private overlayRef: AXOverlayRef<AXMAiAssistPromptBottomPanelComponent> | null = null;\n\n private pendingResolve: ((value: AXPAiAssistRunResult | null) => void) | null = null;\n\n private settled = false;\n\n //#endregion\n\n //#region ---- Public Methods ----\n\n /**\n * Presents the assist prompt bottom panel and resolves when the user submits, cancels, or dismisses the overlay.\n */\n open(\n options: AXPAiAssistShowOptions,\n picker: { assistPickerRows: AXPAiAssistPickerRow[]; agentPickerRows: AXPAiAssistPickerRow[] },\n executeRun: (payload: AXPAiAssistPromptSubmitPayload) => Promise<AXPAiAssistRunResult>,\n ): Promise<AXPAiAssistRunResult | null> {\n if (this.pendingResolve) {\n const superseded = this.pendingResolve;\n this.pendingResolve = null;\n superseded(null);\n }\n this.disposeOverlayOnly();\n\n return new Promise<AXPAiAssistRunResult | null>((resolve) => {\n this.pendingResolve = resolve;\n this.settled = false;\n\n const requestClose = (result: AXPAiAssistRunResult | null): void => {\n this.settle(result);\n this.overlayRef?.dispose();\n };\n\n void this.overlayService\n .create(AXMAiAssistPromptBottomPanelComponent, {\n centered: false,\n width: '100%',\n panelClass: ['axm-ai-assist-prompt-bottom-panel-shell'],\n backdrop: {\n enabled: true,\n background: true,\n closeOnClick: true,\n },\n closeOnEscape: true,\n closeOnOutsideClick: true,\n inputs: {\n title: options.title,\n placeholder: options.placeholder ?? '',\n initialPrompt: options.initialPrompt ?? '',\n contentMaxWidthPx: contentMaxWidthPxForAssistSurface(options.size ?? 'md'),\n assistPickerRows: picker.assistPickerRows,\n agentPickerRows: picker.agentPickerRows,\n initialAssistId: options.assistId,\n initialDirectAgentId: options.directAgentId,\n runPrompt: executeRun,\n requestClose,\n },\n onDispose: () => {\n this.overlayRef = null;\n if (!this.settled && this.pendingResolve) {\n this.settle(null);\n }\n },\n })\n .then((ref) => {\n this.overlayRef = ref;\n })\n .catch(() => {\n this.settle(null);\n });\n });\n }\n\n //#endregion\n\n //#region ---- Utility Methods ----\n\n private settle(result: AXPAiAssistRunResult | null): void {\n if (this.settled) {\n return;\n }\n const done = this.pendingResolve;\n if (!done) {\n return;\n }\n this.settled = true;\n this.pendingResolve = null;\n done(result);\n }\n\n private disposeOverlayOnly(): void {\n if (this.overlayRef) {\n this.overlayRef.dispose();\n this.overlayRef = null;\n }\n }\n\n //#endregion\n}\n\n//#endregion\n","//#region ---- Transcript ----\n\nimport type { AXPAiChatMessage } from '../../ai-engine.types';\nimport { axpAiChatMessageGetText } from '../../ai-engine.types';\n\n/**\n * Text segments from the last assistant message (`type: 'text'` only).\n * Omits `think` and `node` segments so JSON parsing is not polluted by widget envelopes or reasoning blocks stored separately.\n */\nexport function extractLastAssistantTextSegments(messages: AXPAiChatMessage[]): string[] {\n for (let i = messages.length - 1; i >= 0; i--) {\n const m = messages[i];\n if (m.role !== 'assistant') {\n continue;\n }\n const parts: string[] = [];\n for (const r of m.responses) {\n if (r.type === 'text') {\n parts.push(r.content);\n }\n }\n return parts;\n }\n return [];\n}\n\n/**\n * Combined text for structured JSON extraction (text segments only).\n */\nexport function extractLastAssistantStructuredParts(messages: AXPAiChatMessage[]): {\n combined: string;\n segments: string[];\n} {\n const segments = extractLastAssistantTextSegments(messages);\n const combined = segments.join('\\n\\n').trim();\n return { combined, segments };\n}\n\n/**\n * Concatenated plain text from the last assistant message in the transcript (includes `node` payloads like {@link axpAiChatMessageGetText}).\n */\nexport function extractLastAssistantPlainText(messages: AXPAiChatMessage[]): string {\n for (let i = messages.length - 1; i >= 0; i--) {\n const m = messages[i];\n if (m.role === 'assistant') {\n return axpAiChatMessageGetText(m).trim();\n }\n }\n return '';\n}\n\n//#endregion\n","//#region ---- Retry prompt ----\n\n/**\n * User follow-up appended to the transcript when structured JSON parse/validation fails.\n *\n * @param validationDetail - Parse or schema validation error text.\n * @param schemaSummary - Optional expected shape (e.g. TypeScript-style) to improve retry quality.\n * @param failurePhase - Parse failures get stronger anti-truncation wording; validator failures focus on schema/rules.\n */\nexport function buildStructuredOutputRetryUserText(\n validationDetail: string,\n schemaSummary?: string,\n failurePhase?: 'parse' | 'validator',\n): string {\n const detail = validationDetail.trim() || 'Unknown validation error.';\n const lines: string[] = [\n 'The previous response could not be parsed or validated:',\n detail,\n '',\n ];\n if (failurePhase === 'parse') {\n lines.push(\n 'Likely causes: incomplete/truncated JSON, extra prose around the value, or unclosed strings/brackets.',\n 'Reply with ONE complete JSON value only — fully closed strings, braces, and brackets. Do not stop until the JSON is valid.',\n '',\n );\n } else if (failurePhase === 'validator') {\n lines.push(\n 'The JSON was parsed but did not match the required rules or shape. Fix the structure and values; keep the reply as a single JSON value only.',\n '',\n );\n }\n const shape = schemaSummary?.trim();\n if (shape && shape.length > 0) {\n lines.push('Expected JSON shape (summary):', shape, '');\n }\n lines.push(\n 'Return ONLY valid JSON matching the requested structure.',\n 'Do not include markdown fences or explanations.',\n );\n return lines.join('\\n');\n}\n\n//#endregion\n","//#region ---- Parse structured assistant text ----\n\n/**\n * Parses assistant plain text as JSON, supporting optional ```json fences.\n */\nexport function tryParseStructuredAssistantText(text: string): unknown | undefined {\n const t = text.trim();\n if (!t) {\n return undefined;\n }\n try {\n return JSON.parse(t) as unknown;\n } catch {\n const fence = /^```(?:json)?\\s*([\\s\\S]*?)```$/im.exec(t);\n if (fence?.[1]) {\n try {\n return JSON.parse(fence[1].trim()) as unknown;\n } catch {\n return undefined;\n }\n }\n return undefined;\n }\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { tryParseStructuredAssistantText } from './parse-structured-assistant-text';\n\n//#endregion\n\n//#region ---- Balanced JSON extraction ----\n\nfunction tryParseBalancedJsonObjectAt(s: string, start: number): { value: unknown; end: number } | null {\n if (s[start] !== '{') {\n return null;\n }\n let depth = 0;\n let inString = false;\n let escape = false;\n for (let i = start; i < s.length; i++) {\n const c = s[i];\n if (inString) {\n if (escape) {\n escape = false;\n continue;\n }\n if (c === '\\\\') {\n escape = true;\n continue;\n }\n if (c === '\"') {\n inString = false;\n }\n continue;\n }\n if (c === '\"') {\n inString = true;\n continue;\n }\n if (c === '{') {\n depth++;\n } else if (c === '}') {\n depth--;\n if (depth === 0) {\n const slice = s.slice(start, i + 1);\n try {\n return { value: JSON.parse(slice) as unknown, end: i + 1 };\n } catch {\n return null;\n }\n }\n }\n }\n return null;\n}\n\nfunction tryParseBalancedJsonArrayAt(s: string, start: number): { value: unknown; end: number } | null {\n if (s[start] !== '[') {\n return null;\n }\n let depth = 0;\n let inString = false;\n let escape = false;\n for (let i = start; i < s.length; i++) {\n const c = s[i];\n if (inString) {\n if (escape) {\n escape = false;\n continue;\n }\n if (c === '\\\\') {\n escape = true;\n continue;\n }\n if (c === '\"') {\n inString = false;\n }\n continue;\n }\n if (c === '\"') {\n inString = true;\n continue;\n }\n if (c === '[') {\n depth++;\n } else if (c === ']') {\n depth--;\n if (depth === 0) {\n const slice = s.slice(start, i + 1);\n try {\n return { value: JSON.parse(slice) as unknown, end: i + 1 };\n } catch {\n return null;\n }\n }\n }\n }\n return null;\n}\n\n/**\n * Finds first top-level JSON object or array and returns balanced slice text.\n */\nfunction extractFirstBalancedJsonSlice(s: string): string | undefined {\n const iObj = s.indexOf('{');\n const iArr = s.indexOf('[');\n let start = -1;\n let kind: 'obj' | 'arr' | null = null;\n if (iObj >= 0 && iArr >= 0) {\n if (iObj <= iArr) {\n start = iObj;\n kind = 'obj';\n } else {\n start = iArr;\n kind = 'arr';\n }\n } else if (iObj >= 0) {\n start = iObj;\n kind = 'obj';\n } else if (iArr >= 0) {\n start = iArr;\n kind = 'arr';\n }\n if (start < 0 || !kind) {\n return undefined;\n }\n const parsed =\n kind === 'obj' ? tryParseBalancedJsonObjectAt(s, start) : tryParseBalancedJsonArrayAt(s, start);\n if (!parsed) {\n return undefined;\n }\n return s.slice(start, parsed.end);\n}\n\n//#endregion\n\n//#region ---- Lightweight repair ----\n\n/**\n * Removes assistant reasoning tags when they appear inside the text channel (they break JSON extraction).\n */\nexport function stripAssistantThinkingXml(raw: string): string {\n return raw\n .replace(/<(?:redacted_thinking|think)\\b[^>]*>[\\s\\S]*?<\\/(?:redacted_thinking|think)>/gi, '')\n .replace(/&lt;\\/?(?:redacted_thinking|think)&gt;/gi, '')\n .trim();\n}\n\nfunction stripOuterMarkdownFence(s: string): string {\n const t = s.trim();\n const fence = /^```(?:json)?\\s*([\\s\\S]*?)```$/im.exec(t);\n if (fence?.[1]) {\n return fence[1].trim();\n }\n return t;\n}\n\n/** Removes trailing commas before `}` or `]` outside of strings (best-effort for LLM JSON). */\nfunction removeTrailingCommasBeforeBrackets(jsonLike: string): string {\n return jsonLike.replace(/,(\\s*[}\\]])/g, '$1');\n}\n\nfunction tryParseJsonLenient(slice: string): unknown | undefined {\n const t = slice.trim();\n if (!t) {\n return undefined;\n }\n try {\n return JSON.parse(t) as unknown;\n } catch {\n try {\n return JSON.parse(removeTrailingCommasBeforeBrackets(t)) as unknown;\n } catch {\n return undefined;\n }\n }\n}\n\n/**\n * Best-effort parse when the model stopped mid-JSON (truncated completion): closes `{` `[` using a delimiter stack\n * with string awareness. Unsafe inside unclosed strings; last resort after normal repair.\n */\nfunction tryRepairTruncatedJsonWithDelimiterStack(raw: string): unknown | undefined {\n const s = raw.trim();\n if (!s.length) {\n return undefined;\n }\n const stack: ('{' | '[')[] = [];\n let inStr = false;\n let esc = false;\n for (let i = 0; i < s.length; i++) {\n const c = s[i];\n if (inStr) {\n if (esc) {\n esc = false;\n continue;\n }\n if (c === '\\\\') {\n esc = true;\n continue;\n }\n if (c === '\"') {\n inStr = false;\n }\n continue;\n }\n if (c === '\"') {\n inStr = true;\n continue;\n }\n if (c === '{') {\n stack.push('{');\n } else if (c === '[') {\n stack.push('[');\n } else if (c === '}') {\n if (stack.length > 0 && stack[stack.length - 1] === '{') {\n stack.pop();\n }\n } else if (c === ']') {\n if (stack.length > 0 && stack[stack.length - 1] === '[') {\n stack.pop();\n }\n }\n }\n let suffix = '';\n if (inStr) {\n suffix = '\"';\n }\n for (let k = stack.length - 1; k >= 0; k--) {\n suffix += stack[k] === '{' ? '}' : ']';\n }\n if (!suffix.length) {\n return undefined;\n }\n try {\n return JSON.parse(s + suffix) as unknown;\n } catch {\n return undefined;\n }\n}\n\n/**\n * Parses assistant text after cheap local repairs (fences, trailing commas, first JSON value slice).\n * Does not call the model.\n */\nexport function parseStructuredAssistantWithLocalRepair(raw: string): unknown | undefined {\n const cleaned = stripAssistantThinkingXml(raw);\n const direct = tryParseStructuredAssistantText(cleaned);\n if (direct !== undefined) {\n return direct;\n }\n\n const stripped = stripOuterMarkdownFence(cleaned);\n let v = tryParseJsonLenient(stripped);\n if (v !== undefined) {\n return v;\n }\n\n const slice = extractFirstBalancedJsonSlice(cleaned) ?? extractFirstBalancedJsonSlice(stripped);\n if (slice !== undefined) {\n v = tryParseJsonLenient(slice);\n if (v !== undefined) {\n return v;\n }\n v = tryRepairTruncatedJsonWithDelimiterStack(slice);\n if (v !== undefined) {\n return v;\n }\n }\n\n v = tryRepairTruncatedJsonWithDelimiterStack(cleaned) ?? tryRepairTruncatedJsonWithDelimiterStack(stripped);\n if (v !== undefined) {\n return v;\n }\n\n return undefined;\n}\n\n/**\n * Tries combined assistant text, then each text segment from last to first (models often put JSON only in the last paragraph).\n */\nexport function parseStructuredAssistantWithSegmentFallback(combined: string, segments: readonly string[]): unknown | undefined {\n let v = parseStructuredAssistantWithLocalRepair(combined);\n if (v !== undefined) {\n return v;\n }\n const seen = new Set<string>();\n const mark = stripAssistantThinkingXml(combined).trim();\n if (mark.length > 0) {\n seen.add(mark);\n }\n for (let i = segments.length - 1; i >= 0; i--) {\n const seg = stripAssistantThinkingXml(segments[i] ?? '').trim();\n if (!seg.length || seen.has(seg)) {\n continue;\n }\n seen.add(seg);\n v = parseStructuredAssistantWithLocalRepair(seg);\n if (v !== undefined) {\n return v;\n }\n }\n return undefined;\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport type { AXPAiStructuredValidator } from '../../../ai-assist.types';\n\nimport { parseStructuredAssistantWithSegmentFallback } from './repair-structured-assistant-parse';\n\n//#endregion\n\n//#region ---- Validation ----\n\nexport type StructuredAssistantValidation =\n | { ok: true; value: unknown }\n | { ok: false; errorMessage: string; failurePhase: 'parse' | 'validator' };\n\nfunction hasAnyStructuredContent(combined: string, segments: readonly string[] | undefined): boolean {\n if (combined.trim().length > 0) {\n return true;\n }\n if (!segments?.length) {\n return false;\n }\n return segments.some((s) => (s ?? '').trim().length > 0);\n}\n\n/**\n * Parses JSON from assistant text (including lightweight local repair), then optionally runs a custom validator.\n *\n * @param textSegmentsFallback - When provided, each segment is tried after combined text (last segment first); helps when prose and JSON sit in separate assistant text blocks.\n */\nexport async function validateStructuredAssistantResponse(\n assistantPlainText: string,\n structuredValidator: AXPAiStructuredValidator | undefined,\n textSegmentsFallback?: readonly string[],\n): Promise<StructuredAssistantValidation> {\n if (!hasAnyStructuredContent(assistantPlainText, textSegmentsFallback)) {\n return {\n ok: false,\n errorMessage: 'Assistant returned empty output.',\n failurePhase: 'parse',\n };\n }\n\n const parsed = parseStructuredAssistantWithSegmentFallback(assistantPlainText, textSegmentsFallback ?? []);\n if (parsed === undefined) {\n return {\n ok: false,\n errorMessage:\n 'Could not parse assistant output as JSON (expected a JSON object or array; optional markdown fence; segment fallback, local repair, and truncation repair also failed).',\n failurePhase: 'parse',\n };\n }\n\n if (!structuredValidator) {\n return { ok: true, value: parsed };\n }\n\n try {\n const value = await structuredValidator(parsed);\n return { ok: true, value };\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err);\n return {\n ok: false,\n errorMessage: msg.trim().length > 0 ? msg : 'Structured validation failed.',\n failurePhase: 'validator',\n };\n }\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport {\n AXPAiStructuredOutputError,\n type AXPAiAssistStructuredOutputRunRaw,\n type AXPAiStructuredValidator,\n type AXPAiAssistTokenUsageSnapshot,\n} from '../../../ai-assist.types';\n\nimport { axpAiChatTextMessage } from '../../ai-engine.types';\nimport type {\n AXPAiChatMessage,\n AXPAiEngineLastProviderPayload,\n AXPAiEngineRunResult,\n AXPAiEngineUsageTotals,\n} from '../../ai-engine.types';\nimport { buildStructuredOutputRetryUserText } from './build-structured-output-retry-user-text';\nimport {\n extractLastAssistantPlainText,\n extractLastAssistantStructuredParts,\n} from './extract-last-assistant-plain-text';\nimport { stripAssistantThinkingXml } from './repair-structured-assistant-parse';\nimport { validateStructuredAssistantResponse } from './validate-structured-assistant-response';\n\n//#endregion\n\n//#region ---- Usage aggregation ----\n\nfunction mergeEngineUsageTotals(\n acc: AXPAiEngineUsageTotals | undefined,\n next: AXPAiEngineUsageTotals | undefined,\n): AXPAiEngineUsageTotals | undefined {\n if (!acc && !next) {\n return undefined;\n }\n const promptTokens = (acc?.promptTokens ?? 0) + (next?.promptTokens ?? 0);\n const completionTokens = (acc?.completionTokens ?? 0) + (next?.completionTokens ?? 0);\n const totalTokens = (acc?.totalTokens ?? 0) + (next?.totalTokens ?? 0);\n const cachedPromptTokens = (acc?.cachedPromptTokens ?? 0) + (next?.cachedPromptTokens ?? 0);\n return {\n promptTokens,\n completionTokens,\n totalTokens,\n ...(cachedPromptTokens > 0 ? { cachedPromptTokens } : {}),\n };\n}\n\nfunction engineTotalsToSnapshot(totals: AXPAiEngineUsageTotals | undefined): AXPAiAssistTokenUsageSnapshot | undefined {\n if (!totals) {\n return undefined;\n }\n return {\n promptTokens: totals.promptTokens,\n completionTokens: totals.completionTokens,\n totalTokens: totals.totalTokens,\n ...(totals.cachedPromptTokens != null && totals.cachedPromptTokens > 0\n ? { cachedPromptTokens: totals.cachedPromptTokens }\n : {}),\n };\n}\n\n//#endregion\n\n//#region ---- Error snapshot ----\n\nconst STRUCTURED_OUTPUT_ERROR_TEXT_MAX = 8000;\n\nfunction truncateForStructuredOutputError(text: string): string {\n if (text.length <= STRUCTURED_OUTPUT_ERROR_TEXT_MAX) {\n return text;\n }\n return `${text.slice(0, STRUCTURED_OUTPUT_ERROR_TEXT_MAX)}…`;\n}\n\n//#endregion\n\n//#region ---- Pipeline ----\n\nexport interface RunStructuredOutputPipelineParams {\n /** Initial transcript (system + user, etc.). */\n initialMessages: AXPAiChatMessage[];\n\n /** Runs the engine with the given full message list. */\n executeRun: (messages: AXPAiChatMessage[]) => Promise<AXPAiEngineRunResult>;\n\n /**\n * Extra turns after the first response. Total attempts = 1 + maxStructuredRetries.\n * Use 0 for a single attempt.\n */\n maxStructuredRetries: number;\n\n /** When false, only one attempt is made. */\n retryOnInvalidStructure: boolean;\n\n structuredValidator?: AXPAiStructuredValidator;\n\n /** Appended to retry user messages (and should be reflected in the initial user prompt by the caller). */\n structuredOutputSchemaSummary?: string;\n}\n\nexport interface RunStructuredOutputPipelineResult {\n text: string;\n structured: unknown;\n structuredRunRaw: AXPAiAssistStructuredOutputRunRaw;\n}\n\n/**\n * Runs the engine, validates JSON (+ optional custom validator), and appends user retry messages on failure.\n */\nexport async function runStructuredOutputPipeline(\n params: RunStructuredOutputPipelineParams,\n): Promise<RunStructuredOutputPipelineResult> {\n const maxAttempts = params.retryOnInvalidStructure\n ? 1 + Math.max(0, params.maxStructuredRetries)\n : 1;\n\n let messages = params.initialMessages;\n let mergedUsage: AXPAiEngineUsageTotals | undefined;\n let lastProvider: AXPAiEngineLastProviderPayload | undefined;\n let prevFailureStructuredFingerprint: string | undefined;\n let prevFailurePhase: 'parse' | 'validator' | undefined;\n\n const perAttemptUsage: { attemptIndex: number; usage?: AXPAiAssistTokenUsageSnapshot; hasLastProviderResult: boolean }[] =\n [];\n\n for (let attempt = 1; attempt <= maxAttempts; attempt++) {\n const result = await params.executeRun(messages);\n mergedUsage = mergeEngineUsageTotals(mergedUsage, result.usageTotals);\n\n if (result.lastProviderResult !== undefined) {\n lastProvider = result.lastProviderResult;\n }\n messages = result.messages;\n\n const displayText = extractLastAssistantPlainText(messages);\n const structuredParts = extractLastAssistantStructuredParts(messages);\n const structuredFingerprint = stripAssistantThinkingXml(structuredParts.combined).trim();\n\n const attemptUsageSnapshot = engineTotalsToSnapshot(result.usageTotals);\n perAttemptUsage.push({\n attemptIndex: attempt,\n usage: attemptUsageSnapshot,\n hasLastProviderResult: result.lastProviderResult !== undefined,\n });\n\n if (\n attempt > 1 &&\n prevFailureStructuredFingerprint !== undefined &&\n structuredFingerprint === prevFailureStructuredFingerprint &&\n prevFailurePhase === 'validator'\n ) {\n throw new AXPAiStructuredOutputError({\n message:\n 'Assistant returned the same output as the previous attempt while schema validation still failed; stopped to avoid excess token usage.',\n attempts: attempt,\n lastAssistantText: truncateForStructuredOutputError(displayText),\n validationMessage:\n 'The model repeated identical assistant text after a successful JSON parse; no further retries will be requested for this run.',\n code: 'duplicate_assistant_output',\n });\n }\n\n const validation = await validateStructuredAssistantResponse(\n structuredParts.combined,\n params.structuredValidator,\n structuredParts.segments,\n );\n\n if (validation.ok) {\n const structuredRunRaw: AXPAiAssistStructuredOutputRunRaw = {\n kind: 'structured-output',\n attempts: perAttemptUsage,\n totalUsage: engineTotalsToSnapshot(mergedUsage),\n finalAttempt: attempt,\n lastProviderResult: lastProvider,\n };\n return {\n text: displayText,\n structured: validation.value,\n structuredRunRaw,\n };\n }\n\n prevFailureStructuredFingerprint = structuredFingerprint;\n prevFailurePhase = validation.failurePhase;\n\n const canRetry = params.retryOnInvalidStructure && attempt < maxAttempts;\n if (!canRetry) {\n throw new AXPAiStructuredOutputError({\n message: `Structured output validation failed after ${attempt} attempt(s).`,\n attempts: attempt,\n lastAssistantText: truncateForStructuredOutputError(displayText),\n validationMessage: validation.errorMessage,\n code: 'validation_exhausted',\n });\n }\n\n messages = [\n ...result.messages,\n axpAiChatTextMessage(\n 'user',\n buildStructuredOutputRetryUserText(\n validation.errorMessage,\n params.structuredOutputSchemaSummary,\n validation.failurePhase,\n ),\n ),\n ];\n }\n\n throw new AXPAiStructuredOutputError({\n message: 'Structured output validation failed (unexpected end of retry loop).',\n attempts: maxAttempts,\n lastAssistantText: '',\n validationMessage: 'Unexpected pipeline state.',\n code: 'validation_exhausted',\n });\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { AXPSettingsService } from '@acorex/platform/common';\nimport {\n AXPAiAssistDefaultMaxStructuredRetries,\n AXPAiAssistDefaultStructuredMaxTokens,\n type AXPAiAssistPickerRow,\n type AXPAiAssistRunInput,\n type AXPAiAssistRunResult,\n type AXPAiAssistShowOptions,\n} from '../ai-assist.types';\nimport { Injectable, LOCALE_ID, inject } from '@angular/core';\nimport { resolveMultiLanguageString } from '@acorex/core/translation';\nimport type { AXPMultiLanguageString } from '@acorex/platform/core';\nimport { AXPEntityService } from '@acorex/platform/layout/entity';\nimport { RootConfig } from '../const';\nimport { AXPAiManagementSettings } from '../settings.keys';\nimport { AXPAiAssistService } from './ai-assist.abstract';\nimport { AXPAiEngine } from './ai-engine';\nimport {\n axpAiChatTextMessage,\n axpAiChatUserMessage,\n type AXPAiChatMessage,\n type AXPAiChatResponse,\n type AXPAiEffectiveAgentRow,\n type AXPAiEffectiveAssistRow,\n type AXPAiEngineRunOptions,\n type AXPAiEngineRunResult,\n type AXPAiPlatformRuntimeContext,\n} from './ai-engine.types';\nimport { AXPAiPlatformRuntimeContextBuilder } from './ai-platform-runtime-context.builder';\nimport { AXMAiAssistPromptBottomPanelService } from './assist/ai-assist-prompt-bottom-panel.service';\nimport { extractLastAssistantPlainText } from './assist/structured-output/extract-last-assistant-plain-text';\nimport { runStructuredOutputPipeline } from './assist/structured-output/run-structured-output-pipeline';\n\n//#endregion\n\n//#region ---- Row types (UI / queries) ----\n\ntype AXMAiAssistRow = AXPAiEffectiveAssistRow;\n\n//#endregion\n\n//#region ---- Assist run helpers ----\n\nfunction mergePlatformRuntimeContext(\n base: AXPAiPlatformRuntimeContext,\n notes: Record<string, unknown> | undefined | null,\n): AXPAiPlatformRuntimeContext {\n if (!notes || Object.keys(notes).length === 0) {\n return base;\n }\n return { ...base, ...notes };\n}\n\nfunction buildUserPromptBody(input: AXPAiAssistRunInput): string {\n const parts: string[] = [];\n const prompt = input.prompt?.trim() ?? '';\n if (prompt.length > 0) {\n parts.push(prompt);\n }\n\n const hints = input.context?.hints?.filter((h) => (h ?? '').toString().trim().length > 0) ?? [];\n if (hints.length > 0) {\n parts.push('', 'Hints:', ...hints.map((h) => `- ${String(h).trim()}`));\n }\n\n const structured = input.context?.structuredContext;\n if (structured !== undefined && structured !== null) {\n let serialized: string;\n try {\n serialized = typeof structured === 'string' ? structured : JSON.stringify(structured, null, 2);\n } catch {\n serialized = String(structured);\n }\n parts.push('', 'Context (structured):', serialized);\n }\n\n if (input.expectStructuredOutput) {\n const extra = input.structuredOutputInstruction?.trim();\n parts.push(\n '',\n 'Structured output requirements:',\n '- Reply with exactly one JSON value (a single object or array). It must be complete and valid: close every string, bracket, and brace.',\n '- Do not truncate — finish the entire structure in one message.',\n '- No markdown code fences, no text or commentary before or after the JSON.',\n ...(extra && extra.length > 0 ? ['', 'Additional output rules from the task:', extra] : []),\n );\n const schemaSummary = input.structuredOutputSchemaSummary?.trim();\n if (schemaSummary && schemaSummary.length > 0) {\n parts.push('', 'Expected JSON shape (summary):', schemaSummary);\n }\n }\n\n return parts.join('\\n').trim();\n}\n\nfunction buildChatMessages(input: AXPAiAssistRunInput): AXPAiChatMessage[] {\n const messages: AXPAiChatMessage[] = [];\n const systemInstruction = input.context?.systemInstruction?.trim();\n if (systemInstruction) {\n messages.push(axpAiChatTextMessage('system', systemInstruction));\n }\n const body = buildUserPromptBody(input);\n const media = (input.userMediaAttachments ?? []).filter((a) => a.fileId?.trim() && a.mimeType?.trim());\n if (media.length > 0) {\n const responses: AXPAiChatResponse[] = [];\n for (const a of media) {\n const fileId = a.fileId.trim();\n const mimeType = a.mimeType.trim();\n const name = a.name?.trim();\n if (a.kind === 'image') {\n responses.push({\n type: 'image',\n content: { fileId, mimeType, ...(name ? { name } : {}) },\n });\n } else if (a.kind === 'audio') {\n responses.push({\n type: 'audio',\n content: { fileId, mimeType, ...(name ? { name } : {}) },\n });\n } else {\n responses.push({\n type: 'file',\n content: { fileId, mimeType, ...(name ? { name } : {}) },\n });\n }\n }\n const textBody = body.trim().length > 0 ? body : '(empty prompt)';\n responses.push({ type: 'text', content: textBody });\n messages.push(axpAiChatUserMessage(responses));\n } else {\n messages.push(axpAiChatTextMessage('user', body.trim().length > 0 ? body : '(empty prompt)'));\n }\n return messages;\n}\n\ninterface AXMAiModelMaxTokensRow {\n id: string;\n maxOutputTokens?: number;\n}\n\n//#endregion\n\n/**\n * Frontend facade for AI: assist catalog, tenant defaults, engine runs, structured assist runs, and prompt UI.\n */\n@Injectable({ providedIn: 'root' })\nexport class AXPAiManagerService extends AXPAiAssistService {\n //#region ---- Services & Dependencies ----\n\n private readonly aiEngine = inject(AXPAiEngine);\n private readonly entityService = inject(AXPEntityService);\n private readonly settings = inject(AXPSettingsService);\n private readonly runtimeContextBuilder = inject(AXPAiPlatformRuntimeContextBuilder);\n private readonly assistPromptBottomPanel = inject(AXMAiAssistPromptBottomPanelService);\n private readonly localeId = inject(LOCALE_ID);\n\n private readonly assistData = this.entityService\n .withEntity(RootConfig.module.name, RootConfig.entities.assist.name)\n .data<string, AXMAiAssistRow, AXMAiAssistRow, AXMAiAssistRow, AXMAiAssistRow>();\n\n private readonly assistListData = this.entityService\n .withEntity(RootConfig.module.name, RootConfig.entities.assist.name)\n .data<string, AXMAiAssistRow, AXMAiAssistRow, AXMAiAssistRow, AXMAiAssistRow>();\n\n private readonly agentListData = this.entityService\n .withEntity(RootConfig.module.name, RootConfig.entities.agent.name)\n .data<string, AXPAiEffectiveAgentRow, AXPAiEffectiveAgentRow, AXPAiEffectiveAgentRow, AXPAiEffectiveAgentRow>();\n\n private readonly modelEntityData = this.entityService\n .withEntity(RootConfig.module.name, RootConfig.entities.model.name)\n .data<string, AXMAiModelMaxTokensRow, AXMAiModelMaxTokensRow, AXMAiModelMaxTokensRow, AXMAiModelMaxTokensRow>();\n\n private readonly agentEntityData = this.entityService\n .withEntity(RootConfig.module.name, RootConfig.entities.agent.name)\n .data<string, AXPAiEffectiveAgentRow, AXPAiEffectiveAgentRow, AXPAiEffectiveAgentRow, AXPAiEffectiveAgentRow>();\n\n //#endregion\n\n //#region ---- Assist catalog (frontend) ----\n\n /**\n * Maps catalog `title` (multi-language or plain string) to a single-line picker label.\n */\n private toAssistPickerRow(row: { id: string; name?: string; title?: unknown }): AXPAiAssistPickerRow {\n const id = row.id?.trim() ?? '';\n const raw = row.title ?? row.name ?? id;\n const title =\n raw == null || raw === ''\n ? id\n : typeof raw === 'string'\n ? raw.trim() || id\n : resolveMultiLanguageString(raw as AXPMultiLanguageString, this.localeId).trim() || id;\n return { id, name: row.name, title };\n }\n\n /**\n * Loads assist rows for UI pickers (e.g. header menu).\n */\n async listAssistPickerRows(): Promise<AXPAiAssistPickerRow[]> {\n try {\n const result = await this.assistListData.query({\n skip: 0,\n take: 500,\n sort: [{ field: 'title', dir: 'asc' }],\n });\n const items = (result?.items ?? []) as AXMAiAssistRow[];\n return items.filter((r) => r.id?.trim()).map((r) => this.toAssistPickerRow(r));\n } catch {\n return [];\n }\n }\n\n /**\n * Loads AiAgent catalog rows for direct specialist chat (header picker).\n */\n async listAgentPickerRows(): Promise<AXPAiAssistPickerRow[]> {\n try {\n const result = await this.agentListData.query({\n skip: 0,\n take: 500,\n sort: [{ field: 'title', dir: 'asc' }],\n });\n const items = (result?.items ?? []) as AXPAiEffectiveAgentRow[];\n return items.filter((r) => r.id?.trim()).map((r) => this.toAssistPickerRow(r));\n } catch {\n return [];\n }\n }\n\n /**\n * Loads the effective assist from `DefaultAssistId` (tenant setting), or the assist named `platform-default`.\n */\n async getEffectiveAssist(): Promise<AXPAiEffectiveAssistRow> {\n const raw = await this.settings.get<unknown>(AXPAiManagementSettings.DefaultAssistId);\n const assistId =\n typeof raw === 'string'\n ? raw.trim()\n : (raw as { value?: string })?.value != null\n ? String((raw as { value?: string }).value).trim()\n : '';\n\n if (assistId) {\n const byId = await this.assistData.byKey(assistId);\n if (byId) {\n return byId;\n }\n throw new Error(\n `AI assist with id \"${assistId}\" was not found. Open AI Management → AI Settings and pick a valid default assist.`,\n );\n }\n\n const queryResult = await this.assistData.query({\n skip: 0,\n take: 1,\n filter: {\n field: 'name',\n operator: { type: 'equal' },\n value: 'platform-default',\n },\n });\n\n const items = (queryResult?.items ?? []) as AXPAiEffectiveAssistRow[];\n const record = items[0];\n\n if (!record) {\n throw new Error(\n 'No default assist is configured. Create an assist named \"platform-default\" or select one under AI Settings.',\n );\n }\n\n return record;\n }\n\n /**\n * Resolves the assist row for chat: explicit primary key, otherwise the effective default from settings.\n */\n async getAssistForChat(assistId?: string | null): Promise<AXPAiEffectiveAssistRow> {\n const id = assistId?.trim();\n if (id) {\n const row = await this.assistData.byKey(id);\n if (!row) {\n throw new Error(\n `Assist \"${id}\" was not found. Open AI Management → Assists or clear the assist id in the chat URL.`,\n );\n }\n return row;\n }\n return this.getEffectiveAssist();\n }\n\n //#endregion\n\n //#region ---- Engine delegation ----\n\n /**\n * Low-level engine run (chat streaming and tool orchestration).\n */\n runEngine(options: AXPAiEngineRunOptions): Promise<AXPAiEngineRunResult> {\n return this.aiEngine.run(options);\n }\n\n //#endregion\n\n //#region ---- Assist API (run / show) ----\n\n /**\n * Normalizes AiModel.maxOutputTokens from the catalog.\n */\n private normalizeMaxOutputTokens(value: unknown): number | undefined {\n if (typeof value !== 'number' || !Number.isFinite(value) || value <= 0) {\n return undefined;\n }\n return Math.floor(value);\n }\n\n /**\n * Reads {@link AXMAiModelMaxTokensRow.maxOutputTokens} for the model bound to the assist or direct agent.\n */\n private async resolveCatalogMaxOutputTokens(\n assistId: string,\n directAgentId: string | undefined,\n ): Promise<number | undefined> {\n try {\n if (directAgentId) {\n const agent = await this.agentEntityData.byKey(directAgentId);\n const modelEntityId = agent?.modelEntityId?.trim();\n if (!modelEntityId) {\n return undefined;\n }\n const model = await this.modelEntityData.byKey(modelEntityId);\n return this.normalizeMaxOutputTokens(model?.maxOutputTokens);\n }\n const assist = await this.getAssistForChat(assistId);\n const modelEntityId = assist.modelId?.trim();\n if (!modelEntityId) {\n return undefined;\n }\n const model = await this.modelEntityData.byKey(modelEntityId);\n return this.normalizeMaxOutputTokens(model?.maxOutputTokens);\n } catch {\n return undefined;\n }\n }\n\n /** @inheritdoc */\n override async run(input: AXPAiAssistRunInput): Promise<AXPAiAssistRunResult> {\n const baseCtx = await this.runtimeContextBuilder.build();\n const platformRuntimeContext = mergePlatformRuntimeContext(baseCtx, input.platformRuntimeNotes ?? null);\n\n const directAgentId = input.directAgentId?.trim();\n let assistId = input.assistId?.trim();\n\n if (!directAgentId && !assistId) {\n const assist = await this.getEffectiveAssist();\n assistId = assist.id;\n }\n\n const messages = buildChatMessages(input);\n\n const catalogMax = await this.resolveCatalogMaxOutputTokens(assistId as string, directAgentId);\n const effectiveMaxTokens = input.maxTokens ?? catalogMax ?? AXPAiAssistDefaultStructuredMaxTokens;\n\n const runOptions: Omit<AXPAiEngineRunOptions, 'messages'> = {\n platformRuntimeContext,\n ...(directAgentId ? { directAgentId } : { assistId: assistId as string }),\n ...(input.maxSteps !== undefined ? { maxSteps: input.maxSteps } : {}),\n ...(input.temperature !== undefined ? { temperature: input.temperature } : {}),\n maxTokens: effectiveMaxTokens,\n };\n\n if (!input.expectStructuredOutput) {\n const result = await this.runEngine({ ...runOptions, messages });\n const text = extractLastAssistantPlainText(result.messages);\n return {\n text,\n raw: { usageTotals: result.usageTotals, lastProviderResult: result.lastProviderResult },\n };\n }\n\n const retryOnInvalidStructure = input.retryOnInvalidStructure !== false;\n const maxStructuredRetries = input.maxStructuredRetries ?? AXPAiAssistDefaultMaxStructuredRetries;\n\n const structuredMaxTokens = input.structuredOutputMaxTokens ?? effectiveMaxTokens;\n\n const pipelineResult = await runStructuredOutputPipeline({\n initialMessages: messages,\n executeRun: (nextMessages) =>\n this.runEngine({ ...runOptions, maxTokens: structuredMaxTokens, messages: nextMessages }),\n maxStructuredRetries,\n retryOnInvalidStructure,\n structuredValidator: input.structuredValidator,\n structuredOutputSchemaSummary: input.structuredOutputSchemaSummary,\n });\n\n return {\n text: pipelineResult.text,\n structured: pipelineResult.structured,\n raw: pipelineResult.structuredRunRaw,\n };\n }\n\n /** @inheritdoc */\n override async show(options: AXPAiAssistShowOptions): Promise<AXPAiAssistRunResult | null> {\n const [assistPickerRows, agentPickerRows] = await Promise.all([\n this.listAssistPickerRows(),\n this.listAgentPickerRows(),\n ]);\n const data = await this.assistPromptBottomPanel.open(\n options,\n { assistPickerRows, agentPickerRows },\n async (payload) =>\n this.run({\n prompt: payload.prompt,\n userMediaAttachments:\n payload.userMediaAttachments.length > 0 ? payload.userMediaAttachments : undefined,\n context: options.context,\n assistId: payload.assistId,\n directAgentId: payload.directAgentId,\n maxSteps: options.maxSteps,\n temperature: options.temperature,\n maxTokens: options.maxTokens,\n expectStructuredOutput: options.expectStructuredOutput,\n structuredOutputInstruction: options.structuredOutputInstruction,\n platformRuntimeNotes: options.platformRuntimeNotes,\n maxStructuredRetries: options.maxStructuredRetries,\n structuredValidator: options.structuredValidator,\n retryOnInvalidStructure: options.retryOnInvalidStructure,\n structuredOutputSchemaSummary: options.structuredOutputSchemaSummary,\n structuredOutputMaxTokens: options.structuredOutputMaxTokens,\n }),\n );\n\n return data ?? null;\n }\n\n //#endregion\n}\n","//#region ---- Imports ----\n\nimport { AXP_DATA_PATH_PROPERTY, AXP_NAME_PROPERTY } from '@acorex/platform/layout/widgets';\nimport { AXP_WIDGETS_EDITOR_CATEGORY, AXPWidgetConfig, AXPWidgetGroupEnum } from '@acorex/platform/layout/widget-core';\n//#endregion\n\n//#region ---- Config ----\n\nexport const AXMAgentRegistryToolConfiguratorWidget: AXPWidgetConfig = {\n name: 'agent-registry-tool-configurator',\n title: 'Agent registry tool (command / query)',\n icon: 'fa-light fa-screwdriver-wrench',\n description:\n 'Select a command or query definition from the platform registry and optionally set default argument values (persisted with the agent).',\n categories: AXP_WIDGETS_EDITOR_CATEGORY,\n groups: [AXPWidgetGroupEnum.UtilityWidget],\n type: 'editor',\n defaultFilterWidgetName: 'string-filter',\n properties: [\n AXP_NAME_PROPERTY,\n AXP_DATA_PATH_PROPERTY,\n {\n name: 'label',\n title: 'Label',\n visible: true,\n group: { name: 'general', title: 'General', order: 1 },\n schema: {\n dataType: 'string',\n defaultValue: '',\n interface: {\n path: 'label',\n type: 'text-box',\n options: {\n placeholder: 'Field label',\n },\n },\n },\n },\n {\n name: 'registryKind',\n title: 'Registry kind',\n visible: true,\n group: { name: 'behavior', title: 'Behavior', order: 2 },\n schema: {\n dataType: 'string',\n defaultValue: 'command',\n interface: {\n path: 'options.registryKind',\n type: 'select-editor',\n options: {\n items: [\n { id: 'command', title: 'Command' },\n { id: 'query', title: 'Query' },\n ],\n valueField: 'id',\n textField: 'title',\n },\n },\n },\n },\n {\n name: 'readonly',\n title: 'Readonly',\n visible: true,\n group: { name: 'behavior', title: 'Behavior', order: 2 },\n schema: {\n dataType: 'string',\n interface: {\n path: 'options.readonly',\n type: 'text-box',\n options: {\n placeholder: 'true / false / expression',\n },\n },\n },\n },\n {\n name: 'dataSource',\n title: 'Data source override',\n visible: true,\n group: { name: 'data', title: 'Data', order: 3 },\n schema: {\n dataType: 'string',\n interface: {\n path: 'options.dataSource',\n type: 'text-box',\n options: {\n placeholder: 'Optional; defaults by registry kind',\n },\n },\n },\n },\n ],\n components: {\n edit: {\n component: () =>\n import('./agent-registry-tool-configurator-widget-edit.component').then(\n (c) => c.AXMAgentRegistryToolConfiguratorWidgetEditComponent,\n ),\n },\n designer: {\n component: () =>\n import('./agent-registry-tool-configurator-widget-edit.component').then(\n (c) => c.AXMAgentRegistryToolConfiguratorWidgetEditComponent,\n ),\n },\n column: {\n component: () =>\n import('./agent-registry-tool-configurator-widget-column.component').then(\n (c) => c.AXMAgentRegistryToolConfiguratorWidgetColumnComponent,\n ),\n },\n },\n};\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { AXP_DATA_PATH_PROPERTY, AXP_NAME_PROPERTY } from '@acorex/platform/layout/widgets';\nimport { AXP_WIDGETS_EDITOR_CATEGORY, AXPWidgetConfig, AXPWidgetGroupEnum } from '@acorex/platform/layout/widget-core';\nimport { AI_AGENT_CATALOG_DATASOURCE_NAME } from '../../datasources/ai-agent-catalog.datasource';\n\n//#endregion\n\n//#region ---- Config ----\n\nexport const AXMAssistDelegatedAgentConfiguratorWidget: AXPWidgetConfig = {\n name: 'assist-delegated-agent-configurator',\n title: 'Assist Delegated Agent Configurator',\n icon: 'fa-light fa-user-robot',\n description: 'Select a delegated agent and configure injected delegated parameters.',\n categories: AXP_WIDGETS_EDITOR_CATEGORY,\n groups: [AXPWidgetGroupEnum.UtilityWidget],\n type: 'editor',\n defaultFilterWidgetName: 'string-filter',\n properties: [\n AXP_NAME_PROPERTY,\n AXP_DATA_PATH_PROPERTY,\n {\n name: 'label',\n title: 'Label',\n visible: true,\n group: { name: 'general', title: 'General', order: 1 },\n schema: {\n dataType: 'string',\n defaultValue: '@ai-management:assists.entities.assist.fields.delegated-agent.title',\n interface: {\n path: 'label',\n type: 'text-box',\n options: {\n placeholder: 'Field label',\n },\n },\n },\n },\n {\n name: 'readonly',\n title: 'Readonly',\n visible: true,\n group: { name: 'behavior', title: 'Behavior', order: 2 },\n schema: {\n dataType: 'string',\n interface: {\n path: 'options.readonly',\n type: 'text-box',\n options: {\n placeholder: 'true / false / expression',\n },\n },\n },\n },\n {\n name: 'dataSource',\n title: 'Data Source',\n visible: true,\n group: { name: 'data', title: 'Data', order: 3 },\n schema: {\n dataType: 'string',\n defaultValue: AI_AGENT_CATALOG_DATASOURCE_NAME,\n interface: {\n path: 'options.dataSource',\n type: 'text-box',\n },\n },\n },\n ],\n components: {\n edit: {\n component: () =>\n import('./assist-delegated-agent-configurator-widget-edit.component').then(\n (c) => c.AXMAssistDelegatedAgentConfiguratorWidgetEditComponent,\n ),\n },\n designer: {\n component: () =>\n import('./assist-delegated-agent-configurator-widget-edit.component').then(\n (c) => c.AXMAssistDelegatedAgentConfiguratorWidgetEditComponent,\n ),\n },\n column: {\n component: () =>\n import('./assist-delegated-agent-configurator-widget-column.component').then(\n (c) => c.AXMAssistDelegatedAgentConfiguratorWidgetColumnComponent,\n ),\n },\n },\n};\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { AXPWidgetDefinitionProvider } from '@acorex/platform/layout/widget-core';\nimport { Injectable } from '@angular/core';\nimport { AXMAgentRegistryToolConfiguratorWidget } from './features/agent-registry-tool-configurator/agent-registry-tool-configurator-widget.config';\nimport { AXMAssistDelegatedAgentConfiguratorWidget } from './features/assist-delegated-agent-configurator/assist-delegated-agent-configurator-widget.config';\n\n//#endregion\n\n//#region ---- AI Management Widgets Provider ----\n\nconst AI_MANAGEMENT_WIDGETS = [\n AXMAssistDelegatedAgentConfiguratorWidget,\n AXMAgentRegistryToolConfiguratorWidget,\n];\n\n@Injectable()\nexport class AXMAiManagementWidgetsProvider implements AXPWidgetDefinitionProvider {\n getWidgets() {\n return AI_MANAGEMENT_WIDGETS;\n }\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { AXPAuthGuard } from '@acorex/platform/auth';\nimport { AXP_MENU_PROVIDER, AXP_SETTING_DEFINITION_PROVIDER } from '@acorex/platform/common';\nimport {\n AXPComponentSlotModule,\n AXP_DATASOURCE_DEFINITION_PROVIDER,\n AXP_MODULE_MANIFEST_PROVIDER,\n AXP_TAG_PROVIDER,\n} from '@acorex/platform/core';\nimport { AXP_ENTITY_DEFINITION_LOADER } from '@acorex/platform/layout/entity';\nimport { AXP_WIDGET_DEFINITION_PROVIDER } from '@acorex/platform/layout/widget-core';\nimport { AXPWidgetsModule } from '@acorex/platform/layout/widgets';\nimport { AXPRootLayoutComponent } from '@acorex/platform/themes/default';\nimport { NgModule } from '@angular/core';\nimport { ROUTES, Routes } from '@angular/router';\nimport { AiManagementManifest } from './manifest';\nimport { AXMAiManagementEntityProvider } from './entity.provider';\nimport { AXMAiManagementMenuProvider } from './menu.provider';\nimport { AXMAiManagementSettingProvider } from './settings.provider';\nimport { AXMAiAgentCatalogDataSourceDefinition } from './datasources/ai-agent-catalog.datasource';\nimport {\n AXMAiCommandRegistryCatalogDataSourceDefinition,\n AXMAiQueryRegistryCatalogDataSourceDefinition,\n} from './datasources/ai-registry-catalog.datasource';\nimport { AXMAiModelCatalogDataSourceDefinition } from './datasources/ai-model-catalog.datasource';\nimport { AXMAiModelPurposeTagProvider } from './tags/ai-model-purpose-tag.provider';\nimport { AXPAiAssistService } from './features/ai-assist.abstract';\nimport { AXPAiManagerService } from './features/ai-manager.service';\nimport { AXMAiManagementWidgetsProvider } from './widget-definition.provider';\n\n//#endregion\n\n//#region ---- Routes ----\n\nfunction routesFactory(): Routes {\n return [\n {\n path: ':app/ai-management/chat',\n canActivate: [AXPAuthGuard],\n loadComponent: () => AXPRootLayoutComponent,\n title: 'AI Chat',\n children: [\n {\n path: '',\n loadComponent: () =>\n import('./features').then((c) => c.AXMAiChatPageComponent),\n data: { reuse: true },\n },\n ],\n },\n ];\n}\n\n//#endregion\n\n//#region ---- Module ----\n\n@NgModule({\n imports: [\n AXPComponentSlotModule.forChild({\n }),\n AXPWidgetsModule,\n ],\n providers: [\n {\n provide: ROUTES,\n multi: true,\n useFactory: routesFactory,\n },\n {\n provide: AXP_ENTITY_DEFINITION_LOADER,\n useClass: AXMAiManagementEntityProvider,\n multi: true,\n },\n {\n provide: AXP_MODULE_MANIFEST_PROVIDER,\n useValue: AiManagementManifest,\n multi: true,\n },\n {\n provide: AXP_MENU_PROVIDER,\n useClass: AXMAiManagementMenuProvider,\n multi: true,\n },\n {\n provide: AXP_SETTING_DEFINITION_PROVIDER,\n useClass: AXMAiManagementSettingProvider,\n multi: true,\n },\n {\n provide: AXP_DATASOURCE_DEFINITION_PROVIDER,\n useClass: AXMAiModelCatalogDataSourceDefinition,\n multi: true,\n },\n {\n provide: AXP_DATASOURCE_DEFINITION_PROVIDER,\n useClass: AXMAiAgentCatalogDataSourceDefinition,\n multi: true,\n },\n {\n provide: AXP_DATASOURCE_DEFINITION_PROVIDER,\n useClass: AXMAiCommandRegistryCatalogDataSourceDefinition,\n multi: true,\n },\n {\n provide: AXP_DATASOURCE_DEFINITION_PROVIDER,\n useClass: AXMAiQueryRegistryCatalogDataSourceDefinition,\n multi: true,\n },\n {\n provide: AXP_WIDGET_DEFINITION_PROVIDER,\n useClass: AXMAiManagementWidgetsProvider,\n multi: true,\n },\n {\n provide: AXP_TAG_PROVIDER,\n useClass: AXMAiModelPurposeTagProvider,\n multi: true,\n },\n {\n provide: AXPAiAssistService,\n useExisting: AXPAiManagerService,\n },\n ],\n})\nexport class AXMAiManagementModule {}\n\n//#endregion\n","//#region ---- Delegated agent prompt preview ----\n\nfunction normalizeDelegatedAgentToolArgs(argumentsValue: unknown): Record<string, unknown> | null {\n if (argumentsValue == null) {\n return null;\n }\n if (typeof argumentsValue === 'object' && !Array.isArray(argumentsValue)) {\n return { ...(argumentsValue as Record<string, unknown>) };\n }\n if (typeof argumentsValue === 'string') {\n const t = argumentsValue.trim();\n if (!t) {\n return null;\n }\n try {\n const p = JSON.parse(t) as unknown;\n if (p != null && typeof p === 'object' && !Array.isArray(p)) {\n return p as Record<string, unknown>;\n }\n } catch {\n return null;\n }\n }\n return null;\n}\n\nfunction formatArgsFallback(argumentsValue: unknown): string {\n if (argumentsValue == null) {\n return '';\n }\n if (typeof argumentsValue === 'string') {\n return argumentsValue;\n }\n try {\n return JSON.stringify(argumentsValue, null, 2);\n } catch {\n return String(argumentsValue);\n }\n}\n\n/**\n * Human-readable specialist prompt from delegated-agent tool arguments (conversation / mini-chat UI).\n */\nexport function axpAiDelegatedAgentPromptPreview(argumentsValue: unknown): string {\n const obj = normalizeDelegatedAgentToolArgs(argumentsValue);\n if (!obj) {\n return formatArgsFallback(argumentsValue);\n }\n const preferKeys = ['query', 'task', 'prompt', 'message', 'userMessage', 'instruction', 'goal'] as const;\n for (const k of preferKeys) {\n const v = obj[k];\n if (typeof v === 'string' && v.trim()) {\n return v.trim();\n }\n }\n const keys = Object.keys(obj);\n if (keys.length === 1) {\n const only = obj[keys[0]!];\n if (typeof only === 'string' && only.trim()) {\n return only.trim();\n }\n }\n try {\n return JSON.stringify(obj, null, 2);\n } catch {\n return formatArgsFallback(argumentsValue);\n }\n}\n\n//#endregion\n","//#region ---- AI tool command args ----\n\nimport { axpCreateEntityAiToolInputDefaults } from '@acorex/platform/layout/entity';\n\n/**\n * Recursively parses string values that look like JSON objects or arrays, then\n * normalizes nested values the same way.\n *\n * LLM tool calls often stringify nested payloads (e.g. `__context__` for\n * `Entity:Create`). Use this before passing args to the command or query service\n * from AI paths only — not inside generic command infrastructure.\n *\n * @param toolName When set, command-specific AI defaults from command definitions are merged (e.g. `Entity:Create` redirect).\n */\nexport function normalizeAiToolCommandArgs(value: unknown, toolName?: string): unknown {\n const normalized = normalizeLikelyJsonStringValuesRecursive(value);\n return applyAiToolInputDefaultsByCommandName(toolName, normalized);\n}\n\nfunction normalizeLikelyJsonStringValuesRecursive(value: unknown): unknown {\n if (value === null || value === undefined) {\n return value;\n }\n\n if (typeof value === 'string') {\n const trimmed = value.trim();\n if (\n (trimmed.startsWith('{') && trimmed.endsWith('}')) ||\n (trimmed.startsWith('[') && trimmed.endsWith(']'))\n ) {\n try {\n const parsed: unknown = JSON.parse(trimmed);\n return normalizeLikelyJsonStringValuesRecursive(parsed);\n } catch {\n return value;\n }\n }\n return value;\n }\n\n if (Array.isArray(value)) {\n return value.map((item) => normalizeLikelyJsonStringValuesRecursive(item));\n }\n\n if (typeof value === 'object') {\n const obj = value as Record<string, unknown>;\n const out: Record<string, unknown> = {};\n for (const key of Object.keys(obj)) {\n out[key] = normalizeLikelyJsonStringValuesRecursive(obj[key]);\n }\n return out;\n }\n\n return value;\n}\n\nfunction applyAiToolInputDefaultsByCommandName(toolName: string | undefined, payload: unknown): unknown {\n if (toolName !== 'Entity:Create') {\n return payload;\n }\n return mergeEntityCreateAiToolDefaults(payload);\n}\n\n/** Applies `axpCreateEntityAiToolInputDefaults` so AI flows do not trigger post-create navigation. */\nfunction mergeEntityCreateAiToolDefaults(payload: unknown): unknown {\n if (payload == null || typeof payload !== 'object' || Array.isArray(payload)) {\n return payload;\n }\n const p = payload as Record<string, unknown>;\n const ctx = (p['__context__'] as Record<string, unknown> | undefined) ?? {};\n const opts = (ctx['options'] as Record<string, unknown> | undefined) ?? {};\n const proc = (opts['process'] as Record<string, unknown> | undefined) ?? {};\n const defProcess = axpCreateEntityAiToolInputDefaults.__context__.options.process;\n p['__context__'] = {\n ...ctx,\n options: {\n ...opts,\n process: {\n ...proc,\n ...defProcess,\n },\n },\n };\n return p;\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { axpAiChatTextMessage, type AXPAiChatMessage } from '../features/ai-engine.types';\n\n//#endregion\n\n/** Maximum length for assist initial transcript text after HTML strip (characters). */\nconst ASSIST_INITIAL_MESSAGES_MAX_LENGTH = 16_000;\n\n//#region ---- HTML / rich text to plain ----\n\n/**\n * Strips HTML tags and decodes a few common entities for safe plain-text transcript lines.\n * Used for Assist `initialMessages` (may be stored as rich text HTML).\n */\nexport function axpAiStripAssistInitialHtmlToPlain(raw: string): string {\n let s = raw\n .replace(/<\\/p>\\s*(?:<br\\s*\\/?>\\s*)*<p[^>]*>/gi, '\\n\\n')\n .replace(/<\\/p>\\s*<p[^>]*>/gi, '\\n\\n')\n .replace(/<br\\s*\\/?>/gi, '\\n');\n s = s.replace(/<\\/(div|h[1-6]|li|tr)>/gi, '\\n');\n s = s.replace(/<[^>]+>/g, '');\n s = s\n .replace(/&nbsp;/gi, ' ')\n .replace(/&amp;/g, '&')\n .replace(/&lt;/g, '<')\n .replace(/&gt;/g, '>')\n .replace(/&quot;/g, '\"')\n .replace(/&#39;/g, \"'\");\n s = s.replace(/\\r\\n/g, '\\n').trim();\n if (s.length > ASSIST_INITIAL_MESSAGES_MAX_LENGTH) {\n s = s.slice(0, ASSIST_INITIAL_MESSAGES_MAX_LENGTH).trimEnd() + '…';\n }\n return s;\n}\n\n//#endregion\n\n//#region ---- Transcript messages ----\n\n/**\n * Converts assist `initialMessages` (HTML or plain) into one or more `assistant` transcript lines.\n * Non-empty paragraphs (split by blank lines) become separate messages; single block stays one message.\n */\nexport function axpAiAssistInitialMessagesToTranscript(\n raw: string | null | undefined,\n): AXPAiChatMessage[] {\n const trimmed = raw?.trim() ?? '';\n if (!trimmed) {\n return [];\n }\n const plain = axpAiStripAssistInitialHtmlToPlain(trimmed);\n if (!plain) {\n return [];\n }\n const blocks = plain\n .split(/\\n{2,}/)\n .map((b) => b.replace(/\\n+/g, ' ').trim())\n .filter((b) => b.length > 0);\n if (blocks.length === 0) {\n return [];\n }\n return blocks.map((text) => axpAiChatTextMessage('assistant', text));\n}\n\n//#endregion\n","/**\n * Build-time only. Do not import from Angular modules.\n */\nimport {\n AXP_COMMAND_DEFINITION_CATEGORY_AI_TOOLS,\n defineCommand,\n} from '@acorex/platform/runtime';\n\n/** Generates an image from a text prompt; model resolution: explicit input, then delegated specialist `options.model`, then mock catalog default (OpenAI gpt-image-1). */\nexport const AIMANAGEMENT_CHAT_GENERATE_IMAGE_COMMAND_KEY = 'AiManagement:ChatGenerateImage' as const;\n\nexport const aiManagementChatGenerateImageCommandDefinition = defineCommand({\n key: AIMANAGEMENT_CHAT_GENERATE_IMAGE_COMMAND_KEY,\n title: 'Generate image (chat)',\n description:\n 'Generates an image from a text description. Pass catalog image model id, or use options.model on the image-generation delegated specialist; if both are unset, the mock uses the catalog default image model (OpenAI gpt-image-1). Routing follows the model row (transport and provider).',\n executionMode: 'both',\n inputs: [\n {\n name: 'model',\n title: 'Model',\n description:\n 'Optional AiModel catalog row id (image purpose). When omitted, uses delegatedAgents[].options.model for the active delegated specialist (agentId in run context), then the mock default image model if still unset.',\n interface: { name: 'text-editor' },\n },\n {\n name: 'prompt',\n title: 'Prompt',\n description: 'Detailed description of the image to generate.',\n interface: { name: 'text-editor' },\n validations: [{ rule: 'required' }],\n },\n {\n name: 'size',\n title: 'Size',\n description: 'Optional size hint (e.g. 1024x1024). May be ignored.',\n interface: { name: 'text-editor' },\n },\n {\n name: 'style',\n title: 'Style',\n description: 'Optional style hint merged into the prompt by the backend.',\n interface: { name: 'text-editor' },\n },\n ],\n outputs: [\n {\n name: 'fileId',\n title: 'File id',\n description: 'Persisted file id when storage succeeds.',\n interface: { name: 'text-editor' },\n },\n {\n name: 'prompt',\n title: 'Prompt',\n description: 'Original prompt text.',\n interface: { name: 'text-editor' },\n },\n {\n name: 'imageUrl',\n title: 'Image URL',\n description: 'Short https or data URL fallback when persistence fails.',\n interface: { name: 'text-editor' },\n },\n ],\n outcomes: {\n mode: 'static',\n values: ['success'],\n },\n capabilities: ['ai'],\n ai: {\n tags: ['ai-tool', 'ai-chat', 'image'],\n },\n categories: [AXP_COMMAND_DEFINITION_CATEGORY_AI_TOOLS],\n});\n","/**\n * Build-time only. Do not import from Angular modules.\n */\nimport {\n AXP_COMMAND_DEFINITION_CATEGORY_AI_TOOLS,\n defineCommand,\n} from '@acorex/platform/runtime';\n\n/** Transcribes audio from a stored file; default speech model comes from the delegated specialist row (`delegatedAgents[].options.model`). */\nexport const AIMANAGEMENT_CHAT_TRANSCRIBE_SPEECH_COMMAND_KEY = 'AiManagement:ChatTranscribeSpeech' as const;\n\nexport const aiManagementChatTranscribeSpeechCommandDefinition = defineCommand({\n key: AIMANAGEMENT_CHAT_TRANSCRIBE_SPEECH_COMMAND_KEY,\n title: 'Transcribe speech (chat)',\n description:\n 'Transcribes audio from a platform file id. Pass catalog speech model id or rely on options.model for the speech-to-text delegated specialist on this assist; routing uses the model row (transport and provider).',\n executionMode: 'both',\n inputs: [\n {\n name: 'model',\n title: 'Model',\n description:\n 'Optional AiModel catalog row id (speech purpose). When omitted, uses delegatedAgents[].options.model for the active delegated specialist (agentId in run context).',\n interface: { name: 'text-editor' },\n },\n {\n name: 'fileId',\n title: 'File id',\n description: 'Platform file storage id for the audio attachment.',\n interface: { name: 'text-editor' },\n validations: [{ rule: 'required' }],\n },\n {\n name: 'language',\n title: 'Language',\n description: 'Optional BCP-47 language hint (e.g. en) when supported by the provider.',\n interface: { name: 'text-editor' },\n },\n ],\n outputs: [\n {\n name: 'text',\n title: 'Text',\n description: 'Transcribed plain text.',\n interface: { name: 'text-editor' },\n },\n ],\n outcomes: {\n mode: 'static',\n values: ['success'],\n },\n capabilities: ['ai'],\n ai: {\n tags: ['ai-tool', 'ai-chat', 'speech'],\n },\n categories: [AXP_COMMAND_DEFINITION_CATEGORY_AI_TOOLS],\n});\n","/**\n * Build-time only. Do not import from Angular modules.\n */\nimport {\n AXP_COMMAND_DEFINITION_CATEGORY_AI_TOOLS,\n defineCommand,\n} from '@acorex/platform/runtime';\n\n/** Synthesizes speech audio from text; default TTS model comes from the delegated specialist row (`delegatedAgents[].options.model`). */\nexport const AIMANAGEMENT_CHAT_SYNTHESIZE_SPEECH_COMMAND_KEY = 'AiManagement:ChatSynthesizeSpeech' as const;\n\nexport const aiManagementChatSynthesizeSpeechCommandDefinition = defineCommand({\n key: AIMANAGEMENT_CHAT_SYNTHESIZE_SPEECH_COMMAND_KEY,\n title: 'Synthesize speech (chat)',\n description:\n 'Converts text to spoken audio and stores it in platform file storage. Pass catalog TTS model id or rely on options.model for the text-to-speech delegated specialist on this assist; routing uses the model row (transport and provider).',\n executionMode: 'both',\n inputs: [\n {\n name: 'model',\n title: 'Model',\n description:\n 'Optional AiModel catalog row id (tts purpose). When omitted, uses delegatedAgents[].options.model for the active delegated specialist (agentId in run context).',\n interface: { name: 'text-editor' },\n },\n {\n name: 'text',\n title: 'Text',\n description: 'Plain text to speak (provider input length limits apply, e.g. OpenAI 4096 characters).',\n interface: { name: 'text-editor' },\n validations: [{ rule: 'required' }],\n },\n {\n name: 'voice',\n title: 'Voice',\n description:\n 'Optional OpenAI voice id: alloy, echo, fable, onyx, nova, shimmer. When omitted, uses delegatedAgents[].options.voice or alloy.',\n interface: { name: 'text-editor' },\n },\n {\n name: 'responseFormat',\n title: 'Response format',\n description: 'Optional audio format for OpenAI (mp3, opus, aac, flac, wav, pcm). Default mp3.',\n interface: { name: 'text-editor' },\n },\n ],\n outputs: [\n {\n name: 'fileId',\n title: 'File id',\n description: 'Persisted audio file id when storage succeeds.',\n interface: { name: 'text-editor' },\n },\n {\n name: 'text',\n title: 'Text',\n description: 'Source text that was synthesized.',\n interface: { name: 'text-editor' },\n },\n {\n name: 'mimeType',\n title: 'MIME type',\n description: 'Audio MIME type of the stored file.',\n interface: { name: 'text-editor' },\n },\n ],\n outcomes: {\n mode: 'static',\n values: ['success'],\n },\n capabilities: ['ai'],\n ai: {\n tags: ['ai-tool', 'ai-chat', 'tts'],\n },\n categories: [AXP_COMMAND_DEFINITION_CATEGORY_AI_TOOLS],\n});\n","/**\n * Build-time only. Do not import from Angular modules.\n */\nimport {\n AXP_COMMAND_DEFINITION_CATEGORY_AI_TOOLS,\n defineCommand,\n} from '@acorex/platform/runtime';\n\nexport const AIMANAGEMENT_EXTRACT_DOCUMENT_TEXT_COMMAND_KEY = 'AiManagement:ExtractDocumentText' as const;\n\nexport const aiManagementExtractDocumentTextCommandDefinition = defineCommand({\n key: AIMANAGEMENT_EXTRACT_DOCUMENT_TEXT_COMMAND_KEY,\n title: 'Extract text from document image',\n description:\n 'Transcribes visible text from an image stored in platform file storage (scans, photos of documents, forms, including medical paperwork). Uses the active chat model’s vision capability. Output is informational transcription only—not clinical interpretation.',\n executionMode: 'both',\n inputs: [\n {\n name: 'fileId',\n title: 'File id',\n description:\n 'Platform file storage id for the image (same as chat image attachments). Supported formats follow the active vision model (e.g. PNG, JPEG, WEBP).',\n interface: { name: 'text-editor' },\n validations: [{ rule: 'required' }],\n },\n {\n name: 'instruction',\n title: 'Instruction',\n description:\n 'Optional extra instructions (e.g. language, focus on lab values only, preserve table layout).',\n interface: { name: 'text-editor' },\n },\n ],\n outputs: [\n {\n name: 'text',\n title: 'Extracted text',\n description: 'Transcribed text with structure preserved where possible.',\n interface: { name: 'text-editor' },\n },\n ],\n outcomes: {\n mode: 'static',\n values: ['success'],\n },\n capabilities: ['ai'],\n ai: {\n shortDescription:\n 'OCR-style transcription from an image file id using the chat vision model; preserves layout; no medical diagnosis.',\n tags: ['ai-tool', 'ai-chat', 'ocr', 'vision', 'document', 'multimodal'],\n },\n categories: [AXP_COMMAND_DEFINITION_CATEGORY_AI_TOOLS],\n});\n","/**\n * Build-time only. Do not import from Angular modules.\n */\nimport {\n AXP_COMMAND_DEFINITION_CATEGORY_AI_TOOLS,\n defineCommand,\n} from '@acorex/platform/runtime';\n\nexport const AIMANAGEMENT_STRUCTURED_TEXT_COMPLETION_COMMAND_KEY =\n 'AiManagement:StructuredTextCompletion' as const;\n\nexport const aiManagementStructuredTextCompletionCommandDefinition = defineCommand({\n key: AIMANAGEMENT_STRUCTURED_TEXT_COMPLETION_COMMAND_KEY,\n title: 'Structured text completion',\n description:\n 'Single-turn chat completion without tools (e.g. map OCR text to JSON). Uses the resolved assist model.',\n executionMode: 'both',\n inputs: [],\n outputs: [\n {\n name: 'text',\n title: 'Assistant text',\n description: 'Plain text from the model.',\n interface: { name: 'large-text-editor' },\n },\n ],\n outcomes: {\n mode: 'static',\n values: ['success'],\n },\n capabilities: ['ai'],\n ai: {\n shortDescription: 'Tool-free structured completion for metadata mapping and similar tasks.',\n tags: ['ai-tool', 'ai-chat', 'completion'],\n },\n categories: [AXP_COMMAND_DEFINITION_CATEGORY_AI_TOOLS],\n});\n","//#region ---- AI chat registry command keys (re-exports) ----\n\nexport { AIMANAGEMENT_CHAT_GENERATE_IMAGE_COMMAND_KEY } from './chat-generate-image.command.definition';\nexport { AIMANAGEMENT_CHAT_TRANSCRIBE_SPEECH_COMMAND_KEY } from './chat-transcribe-speech.command.definition';\nexport { AIMANAGEMENT_CHAT_SYNTHESIZE_SPEECH_COMMAND_KEY } from './chat-synthesize-speech.command.definition';\nexport { AIMANAGEMENT_EXTRACT_DOCUMENT_TEXT_COMMAND_KEY } from './extract-document-text.command.definition';\nexport { AIMANAGEMENT_STRUCTURED_TEXT_COMPLETION_COMMAND_KEY } from './structured-text-completion.command.definition';\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { Injectable, signal } from '@angular/core';\nimport type { AXPAiChatTransport } from '../features/ai-engine.types';\n\n//#endregion\n\n//#region ---- Run context ----\n\nexport interface AXPAiChatToolRunContext {\n assistId: string;\n chatTransport: AXPAiChatTransport;\n /** AiModel catalog row id for the active chat model (when resolved). */\n modelEntityId?: string;\n /** Set during a delegated agent sub-run (specialist executing registry tools). */\n agentId?: string;\n /** AiAgent catalog `name` (slug). Demisco chat API expects this value in `agent_uuid`. */\n agentName?: string;\n /** Optional Demisco chat session id (`session_uuid` in multipart). */\n demisSessionUuid?: string;\n}\n\n/**\n * Per chat run: stores which assist and chat transport are active.\n * Injected commands (e.g. image generation) read this instead of receiving assist/transport inside tool args.\n */\n@Injectable({ providedIn: 'root' })\nexport class AXPAiChatToolRunContextService {\n private readonly runContext = signal<AXPAiChatToolRunContext | null>(null);\n\n setContext(ctx: AXPAiChatToolRunContext | null): void {\n this.runContext.set(ctx);\n }\n\n getContext(): AXPAiChatToolRunContext | null {\n return this.runContext();\n }\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { AIMANAGEMENT_CHAT_GENERATE_IMAGE_COMMAND_KEY } from './chat-generate-image.command.definition';\nimport { AIMANAGEMENT_CHAT_SYNTHESIZE_SPEECH_COMMAND_KEY } from './chat-synthesize-speech.command.definition';\nimport { AIMANAGEMENT_CHAT_TRANSCRIBE_SPEECH_COMMAND_KEY } from './chat-transcribe-speech.command.definition';\n\n//#endregion\n\n//#region ---- LLM JSON Schema overrides ----\n\n/**\n * Registry rows map inputs to string-typed JSON schemas. Override parameters for AI chat tools\n * so models receive accurate types (arrays, booleans, nested objects).\n */\nexport function getAiChatCommandLlmParametersOverride(\n commandName: string,\n): Record<string, unknown> | null {\n switch (commandName) {\n case AIMANAGEMENT_CHAT_GENERATE_IMAGE_COMMAND_KEY:\n return {\n type: 'object',\n properties: {\n model: {\n type: 'string',\n description:\n 'Optional catalog AiModel row id for image generation. Omit to use options.model on the image delegated specialist row.',\n },\n prompt: {\n type: 'string',\n description: 'Detailed text description of the image to generate.',\n },\n size: {\n type: 'string',\n description: 'Optional size hint for backends that support it (e.g. 1024x1024). May be ignored.',\n },\n style: {\n type: 'string',\n description:\n 'Optional style hint (e.g. photorealistic, flat vector). May be merged into the prompt by the backend.',\n },\n },\n required: ['prompt'],\n };\n case AIMANAGEMENT_CHAT_TRANSCRIBE_SPEECH_COMMAND_KEY:\n return {\n type: 'object',\n properties: {\n model: {\n type: 'string',\n description:\n 'Optional catalog AiModel row id for speech-to-text. Omit to use options.model on the speech delegated specialist row.',\n },\n fileId: {\n type: 'string',\n description: 'Platform file storage id for the audio file to transcribe.',\n },\n language: {\n type: 'string',\n description: 'Optional language hint (e.g. en) when supported by the provider.',\n },\n },\n required: ['fileId'],\n };\n case AIMANAGEMENT_CHAT_SYNTHESIZE_SPEECH_COMMAND_KEY:\n return {\n type: 'object',\n properties: {\n model: {\n type: 'string',\n description:\n 'Optional catalog AiModel row id for text-to-speech (purpose tts). Omit to use options.model on the TTS delegated specialist row.',\n },\n text: {\n type: 'string',\n description: 'Plain text to convert to speech.',\n },\n voice: {\n type: 'string',\n description:\n 'Optional OpenAI voice (alloy, echo, fable, onyx, nova, shimmer). Omit to use options.voice or alloy.',\n },\n responseFormat: {\n type: 'string',\n description: 'Optional audio format: mp3, opus, aac, flac, wav, pcm. Default mp3.',\n },\n },\n required: ['text'],\n };\n default:\n return null;\n }\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { Injectable, LOCALE_ID, inject } from '@angular/core';\nimport { resolveMultiLanguageString } from '@acorex/core/translation';\nimport type { AXPMultiLanguageString } from '@acorex/platform/core';\nimport { AXPEntityService } from '@acorex/platform/layout/entity';\nimport { RootConfig } from '../const';\nimport { isChatPurposeModelRow } from '../datasources/ai-model-catalog.datasource';\nimport type {\n AXPAiChatModelListItem,\n AXPAiChatModelListRequest,\n} from './ai-engine.types';\n\n//#endregion\n\n//#region ---- Row types (entity query) ----\n\ninterface CatalogModelRow {\n id: string;\n name?: string;\n title?: string | AXPMultiLanguageString;\n chatTransport?: string;\n openAiEndpointId?: string;\n maxContextTokens?: number;\n inputPricePerMillion?: number;\n outputPricePerMillion?: number;\n cachedInputPricePerMillion?: number;\n isDisabled?: boolean;\n openAiEndpointIsDisabled?: boolean;\n}\n\ninterface CatalogOpenAiEndpointRow {\n id: string;\n isDisabled?: boolean;\n}\n\n//#endregion\n\n/**\n * Lists chat-purpose AI models (catalog), without using {@link AXPAiEngine}.\n */\n@Injectable({ providedIn: 'root' })\nexport class AXPAiAssistChatModelCatalogService {\n //#region ---- Services & Dependencies ----\n\n private readonly entityService = inject(AXPEntityService);\n private readonly localeId = inject(LOCALE_ID);\n\n private readonly modelData = this.entityService\n .withEntity(RootConfig.module.name, RootConfig.entities.model.name)\n .data<string, CatalogModelRow, CatalogModelRow, CatalogModelRow, CatalogModelRow>();\n\n private readonly openAiEndpointData = this.entityService\n .withEntity(RootConfig.module.name, RootConfig.entities.openAiEndpoint.name)\n .data<\n string,\n CatalogOpenAiEndpointRow,\n CatalogOpenAiEndpointRow,\n CatalogOpenAiEndpointRow,\n CatalogOpenAiEndpointRow\n >();\n\n //#endregion\n\n //#region ---- Public API ----\n\n /**\n * All active chat-purpose models in the catalog (assist / agent policy is applied at engine runtime).\n */\n async listModels(_request?: AXPAiChatModelListRequest): Promise<AXPAiChatModelListItem[]> {\n const queryResult = await this.modelData.query({\n skip: 0,\n take: 500,\n });\n const items = (queryResult?.items ?? []) as CatalogModelRow[];\n let rows = items.filter((x) => isChatPurposeModelRow(x as unknown as Record<string, unknown>));\n\n rows = await this.filterModelsActiveForChat(rows);\n\n return rows.map((x) => ({\n id: x.id,\n name: x.name?.trim() ?? '',\n title:\n resolveMultiLanguageString((x.title ?? x.name ?? x.id) as AXPMultiLanguageString, this.localeId).trim() || x.id,\n chatTransport: x.chatTransport,\n maxContextTokens:\n typeof x.maxContextTokens === 'number' && x.maxContextTokens > 0\n ? x.maxContextTokens\n : undefined,\n inputPricePerMillion:\n typeof x.inputPricePerMillion === 'number' && x.inputPricePerMillion > 0\n ? x.inputPricePerMillion\n : undefined,\n outputPricePerMillion:\n typeof x.outputPricePerMillion === 'number' && x.outputPricePerMillion > 0\n ? x.outputPricePerMillion\n : undefined,\n cachedInputPricePerMillion:\n typeof x.cachedInputPricePerMillion === 'number' && x.cachedInputPricePerMillion > 0\n ? x.cachedInputPricePerMillion\n : undefined,\n }));\n }\n\n //#endregion\n\n //#region ---- Model filtering ----\n\n /**\n * Chat pickers only use models that are enabled and backed by an enabled OpenAI endpoint when applicable.\n */\n private async filterModelsActiveForChat(rows: CatalogModelRow[]): Promise<CatalogModelRow[]> {\n const endpointIds = [\n ...new Set(\n rows\n .filter((r) => String(r.chatTransport ?? '').toLowerCase() === 'openai' && r.openAiEndpointId?.trim())\n .map((r) => r.openAiEndpointId!.trim()),\n ),\n ];\n const endpointDisabled = new Map<string, boolean>();\n for (const id of endpointIds) {\n const ep = await this.openAiEndpointData.byKey(id);\n endpointDisabled.set(id, ep?.isDisabled === true);\n }\n\n return rows.filter((x) => {\n if (x.isDisabled === true) {\n return false;\n }\n if (x.openAiEndpointIsDisabled === true) {\n return false;\n }\n const transport = String(x.chatTransport ?? '').toLowerCase();\n if (transport === 'openai' && x.openAiEndpointId?.trim()) {\n if (endpointDisabled.get(x.openAiEndpointId.trim()) === true) {\n return false;\n }\n }\n return true;\n });\n }\n\n //#endregion\n}\n","//#region ---- Imports ----\n\nimport { type AXPAiChatMessage, axpAiChatMessageGetText } from '../ai-engine.types';\n\n//#endregion\n\n//#region ---- Utility Methods ----\n\nexport interface AssistantParsedContent {\n thinking: string | null;\n body: string;\n}\n\n/**\n * If some layers store escaped brackets, normalize so the main regex can match.\n */\nfunction normalizeRedactedTags(raw: string): string {\n return raw\n .replace(/&lt;(\\/?redacted_thinking)&gt;/gi, '<$1>')\n .replace(/&lt;(\\/?think)&gt;/gi, '<$1>');\n}\n\n/**\n * Pulls model thinking out of `<redacted_thinking>…</redacted_thinking>` or `<think>…</think>`;\n * rest of the string is `body`.\n */\nexport function parseAssistantContentForDisplay(content: unknown): AssistantParsedContent {\n const raw = normalizeRedactedTags(\n typeof content === 'string' ? content : content == null ? '' : String(content),\n );\n\n if (!raw) {\n return { thinking: null, body: '' };\n }\n\n const thinkingParts: string[] = [];\n const re = /<(redacted_thinking|think)>([\\s\\S]*?)<\\/\\1>/gi;\n const body = raw\n .replace(re, (_match, _tag: string, inner: string) => {\n const t = inner.trim();\n if (t.length) {\n thinkingParts.push(t);\n }\n return '';\n })\n .trim();\n\n const thinking = thinkingParts.length ? thinkingParts.join('\\n\\n') : null;\n\n return { thinking, body };\n}\n\n/**\n * Visible reply only: same as `parseAssistantContentForDisplay(content).body`.\n */\nexport function stripAssistantThinkingForDisplay(content: unknown): string {\n return parseAssistantContentForDisplay(content).body;\n}\n\nfunction isRenderableAssistantNodeContent(content: unknown): boolean {\n return (\n content != null &&\n typeof content === 'object' &&\n !Array.isArray(content) &&\n typeof (content as Record<string, unknown>)['type'] === 'string'\n );\n}\n\n/**\n * Parses assistant messages for chat bubbles: `think` segments, `text` body, and optional layout `node`.\n * When the message contains only a renderable `node` (no `think`/`text`), the body is left empty so the UI\n * does not show the JSON envelope from {@link axpAiChatMessageGetText} next to {@link axp-layout-renderer}.\n */\nexport function parseAssistantMessageForDisplayFromMessage(\n message: AXPAiChatMessage,\n): AssistantParsedContent {\n if (message.role !== 'assistant') {\n return parseAssistantContentForDisplay(axpAiChatMessageGetText(message));\n }\n const thinkParts: string[] = [];\n const textParts: string[] = [];\n let hasRenderableNode = false;\n for (const seg of message.responses) {\n if (seg.type === 'think') {\n const t = seg.content?.trim();\n if (t) {\n thinkParts.push(t);\n }\n } else if (seg.type === 'text') {\n if (typeof seg.content === 'string' && seg.content.trim()) {\n textParts.push(seg.content.trim());\n }\n } else if (seg.type === 'node' && isRenderableAssistantNodeContent(seg.content)) {\n hasRenderableNode = true;\n }\n }\n if (thinkParts.length > 0 || textParts.length > 0) {\n return {\n thinking: thinkParts.length > 0 ? thinkParts.join('\\n\\n') : null,\n body: textParts.join('\\n\\n'),\n };\n }\n if (hasRenderableNode) {\n return { thinking: null, body: '' };\n }\n return parseAssistantContentForDisplay(axpAiChatMessageGetText(message));\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport type { AXPAiChatMessage, AXPAiChatResponse, AXPAiToolCall } from '../ai-engine.types';\nimport {\n axpAiChatMessageGetText,\n axpAiChatToolOrAgentResultBodyJson,\n axpAiToolCallFromAssistantToolMessage,\n} from '../ai-engine.types';\n\n//#endregion\n\n//#region ---- Types ----\n\n/** One tool call matched with the tool-role message content that follows the assistant turn. */\nexport interface AXMAiChatToolCallPair {\n call: AXPAiToolCall;\n outputContent: string;\n}\n\n/** Assistant tool round: optional preamble text lines, then tool/result pairs, optional follow-up text. */\nexport interface AXMAiChatToolTurnItem {\n kind: 'tool-turn';\n /** Assistant `text` lines that preceded the first tool call in this round. */\n preambleMessages: AXPAiChatMessage[];\n pairs: AXMAiChatToolCallPair[];\n /** When the model called tools and then responded with text, the follow-up message is absorbed here. */\n followUpMessage?: AXPAiChatMessage;\n}\n\nexport interface AXMAiChatSimpleItem {\n kind: 'simple';\n message: AXPAiChatMessage;\n}\n\nexport type AXMAiChatDisplayItem = AXMAiChatToolTurnItem | AXMAiChatSimpleItem;\n\n//#endregion\n\n//#region ---- Build display items ----\n\nfunction isAssistantInvocationSegment(r: AXPAiChatResponse | undefined): boolean {\n return r?.type === 'tool' || r?.type === 'agent';\n}\n\n/**\n * Aligns assistant tool lines with tool results. The agent stores N consecutive `assistant` tool\n * rows then N consecutive `tool` tool_result rows (same order as execution), not interleaved.\n * Match output to each call by {@link AXPAiToolCall.id} / {@link AXPAiChatToolResultResponse.callId}.\n */\nfunction consumeAssistantToolPairs(\n messages: AXPAiChatMessage[],\n start: number,\n): { pairs: AXMAiChatToolCallPair[]; nextIndex: number } {\n const calls: AXPAiToolCall[] = [];\n let j = start;\n while (\n j < messages.length &&\n messages[j].role === 'assistant' &&\n isAssistantInvocationSegment(messages[j].responses[0])\n ) {\n const call = axpAiToolCallFromAssistantToolMessage(messages[j]);\n if (call) {\n calls.push(call);\n }\n j++;\n }\n\n const resultsByCallId = new Map<string, string>();\n while (\n j < messages.length &&\n messages[j].role === 'tool' &&\n messages[j].responses.some((r) => r.type === 'tool_result' || r.type === 'agent_result')\n ) {\n const tm = messages[j];\n const tr = tm.responses.find((r) => r.type === 'tool_result' || r.type === 'agent_result');\n const id = tr?.callId?.trim() ?? '';\n if (id) {\n resultsByCallId.set(id, axpAiChatToolOrAgentResultBodyJson(tm));\n }\n j++;\n }\n\n const pairs: AXMAiChatToolCallPair[] = calls.map((call) => ({\n call,\n outputContent: resultsByCallId.get(call.id) ?? '',\n }));\n\n return { pairs, nextIndex: j };\n}\n\nfunction tryConsumeAssistantTextFollowUp(\n messages: AXPAiChatMessage[],\n start: number,\n): { message: AXPAiChatMessage | undefined; nextIndex: number } {\n if (start >= messages.length || messages[start].role !== 'assistant') {\n return { message: undefined, nextIndex: start };\n }\n const m = messages[start];\n const r0 = m.responses[0];\n if (r0?.type === 'text' && axpAiChatMessageGetText(m).trim()) {\n return { message: m, nextIndex: start + 1 };\n }\n if (r0?.type === 'node') {\n return { message: m, nextIndex: start + 1 };\n }\n return { message: undefined, nextIndex: start };\n}\n\n/**\n * Groups assistant preamble text, tool/result pairs, and optional follow-up text into {@link AXMAiChatToolTurnItem}.\n */\nexport function axmBuildChatDisplayItems(messages: AXPAiChatMessage[]): AXMAiChatDisplayItem[] {\n const items: AXMAiChatDisplayItem[] = [];\n let i = 0;\n while (i < messages.length) {\n if (messages[i].role === 'assistant' && messages[i].responses[0]?.type === 'text') {\n const preambleMessages: AXPAiChatMessage[] = [];\n while (\n i < messages.length &&\n messages[i].role === 'assistant' &&\n messages[i].responses[0]?.type === 'text'\n ) {\n preambleMessages.push(messages[i]);\n i++;\n }\n if (\n i < messages.length &&\n messages[i].role === 'assistant' &&\n isAssistantInvocationSegment(messages[i].responses[0])\n ) {\n const { pairs, nextIndex } = consumeAssistantToolPairs(messages, i);\n const follow = tryConsumeAssistantTextFollowUp(messages, nextIndex);\n items.push({\n kind: 'tool-turn',\n preambleMessages,\n pairs,\n followUpMessage: follow.message,\n });\n i = follow.nextIndex;\n continue;\n }\n for (const pm of preambleMessages) {\n items.push({ kind: 'simple', message: pm });\n }\n continue;\n }\n if (messages[i].role === 'assistant' && isAssistantInvocationSegment(messages[i].responses[0])) {\n const { pairs, nextIndex } = consumeAssistantToolPairs(messages, i);\n const follow = tryConsumeAssistantTextFollowUp(messages, nextIndex);\n items.push({\n kind: 'tool-turn',\n preambleMessages: [],\n pairs,\n followUpMessage: follow.message,\n });\n i = follow.nextIndex;\n continue;\n }\n items.push({ kind: 'simple', message: messages[i] });\n i++;\n }\n return items;\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { AXPFileStorageService } from '@acorex/platform/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n DestroyRef,\n effect,\n inject,\n input,\n signal,\n ViewEncapsulation,\n} from '@angular/core';\n\n//#endregion\n\n/**\n * Loads audio from {@link AXPFileStorageService} by fileId for chat TTS tool output preview.\n */\n@Component({\n selector: 'axm-ai-chat-tool-audio-preview',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n template: `\n @if (audioSrc(); as src) {\n <audio\n class=\"ax-block ax-w-full ax-max-w-md\"\n controls\n preload=\"metadata\"\n [attr.aria-label]=\"ariaLabel() ?? titleText()\"\n >\n <source [src]=\"src\" [type]=\"mimeType()\" />\n </audio>\n } @else if (errorText(); as err) {\n <p class=\"ax-text-sm ax-text-danger ax-m-0\">{{ err }}</p>\n }\n `,\n})\nexport class AXMAiChatToolAudioPreviewComponent {\n //#region ---- Services & Dependencies ----\n\n private readonly fileStorage = inject(AXPFileStorageService);\n private readonly destroyRef = inject(DestroyRef);\n\n //#endregion\n\n //#region ---- Inputs ----\n\n readonly fileId = input<string>('');\n\n readonly mimeType = input<string>('audio/mpeg');\n\n /** Short caption (e.g. spoken text snippet). */\n readonly titleText = input<string>('Generated speech');\n\n readonly ariaLabel = input<string | undefined>(undefined);\n\n //#endregion\n\n //#region ---- State ----\n\n readonly audioSrc = signal<string | null>(null);\n\n readonly errorText = signal<string | null>(null);\n\n private objectUrlToRevoke: string | null = null;\n\n private loadGeneration = 0;\n\n //#endregion\n\n //#region ---- Lifecycle / effects ----\n\n constructor() {\n effect(() => {\n const id = this.fileId()?.trim() ?? '';\n const gen = ++this.loadGeneration;\n this.revokeObjectUrl();\n this.audioSrc.set(null);\n this.errorText.set(null);\n if (!id) {\n return;\n }\n\n void this.fileStorage\n .getInfo(id)\n .then((info) => {\n if (gen !== this.loadGeneration) {\n return;\n }\n const url = info.url?.trim();\n if (url) {\n this.audioSrc.set(url);\n return;\n }\n const bin = info.binary;\n if (bin instanceof Blob) {\n const ou = URL.createObjectURL(bin);\n this.objectUrlToRevoke = ou;\n this.audioSrc.set(ou);\n return;\n }\n this.errorText.set('Audio file could not be loaded.');\n })\n .catch(() => {\n if (gen !== this.loadGeneration) {\n return;\n }\n this.errorText.set('Audio file could not be loaded.');\n });\n });\n\n this.destroyRef.onDestroy(() => this.revokeObjectUrl());\n }\n\n //#endregion\n\n //#region ---- Utility Methods ----\n\n private revokeObjectUrl(): void {\n if (this.objectUrlToRevoke) {\n URL.revokeObjectURL(this.objectUrlToRevoke);\n this.objectUrlToRevoke = null;\n }\n }\n\n //#endregion\n}\n","//#region ---- Imports ----\n\nimport { AXPFileStorageService } from '@acorex/platform/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n DestroyRef,\n effect,\n inject,\n input,\n signal,\n ViewEncapsulation,\n} from '@angular/core';\n\n//#endregion\n\n/**\n * Loads an image from {@link AXPFileStorageService} by fileId for chat tool output preview.\n */\n@Component({\n selector: 'axm-ai-chat-tool-image-preview',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n template: `\n @if (imageSrc(); as src) {\n <img\n [src]=\"src\"\n [alt]=\"altText()\"\n class=\"ax-block ax-max-w-full ax-h-auto ax-max-h-[min(70vh,32rem)]\"\n [attr.aria-label]=\"ariaLabel() ?? altText()\"\n />\n } @else if (errorText(); as err) {\n <p class=\"ax-text-sm ax-text-danger ax-m-0\">{{ err }}</p>\n }\n `,\n})\nexport class AXMAiChatToolImagePreviewComponent {\n //#region ---- Services & Dependencies ----\n\n private readonly fileStorage = inject(AXPFileStorageService);\n private readonly destroyRef = inject(DestroyRef);\n\n //#endregion\n\n //#region ---- Inputs ----\n\n readonly fileId = input<string>('');\n\n readonly altText = input<string>('Generated image');\n\n readonly ariaLabel = input<string | undefined>(undefined);\n\n //#endregion\n\n //#region ---- State ----\n\n readonly imageSrc = signal<string | null>(null);\n\n readonly errorText = signal<string | null>(null);\n\n private objectUrlToRevoke: string | null = null;\n\n private loadGeneration = 0;\n\n //#endregion\n\n //#region ---- Lifecycle / effects ----\n\n constructor() {\n effect(() => {\n const id = this.fileId()?.trim() ?? '';\n const gen = ++this.loadGeneration;\n this.revokeObjectUrl();\n this.imageSrc.set(null);\n this.errorText.set(null);\n if (!id) {\n return;\n }\n\n void this.fileStorage\n .getInfo(id)\n .then((info) => {\n if (gen !== this.loadGeneration) {\n return;\n }\n const url = info.url?.trim();\n if (url) {\n this.imageSrc.set(url);\n return;\n }\n const bin = info.binary;\n if (bin instanceof Blob) {\n const ou = URL.createObjectURL(bin);\n this.objectUrlToRevoke = ou;\n this.imageSrc.set(ou);\n return;\n }\n this.errorText.set('Image file could not be loaded.');\n })\n .catch(() => {\n if (gen !== this.loadGeneration) {\n return;\n }\n this.errorText.set('Image file could not be loaded.');\n });\n });\n\n this.destroyRef.onDestroy(() => this.revokeObjectUrl());\n }\n\n //#endregion\n\n //#region ---- Utility Methods ----\n\n private revokeObjectUrl(): void {\n if (this.objectUrlToRevoke) {\n URL.revokeObjectURL(this.objectUrlToRevoke);\n this.objectUrlToRevoke = null;\n }\n }\n\n //#endregion\n}\n","//#region ---- Imports ----\n\nimport { AXToastService } from '@acorex/components/toast';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport { type AXPAiToolCall } from '../ai-engine.types';\nimport { normalizeAiToolCommandArgs } from '../../utils/ai-tool-command-args-normalize';\nimport { type AXPDialogRef, AXPLayoutBuilderService, type IFlexContainerBuilder } from '@acorex/platform/layout/builder';\nimport { AXPCommandService, AXPQueryService } from '@acorex/platform/runtime';\nimport { inject, Injectable } from '@angular/core';\n\n//#endregion\n\n//#region ---- Service ----\n\n/**\n * Opens the tool/query execute dialog (edit JSON / fields, run command or query) shared by\n * {@link AXMAiChatPageComponent} and {@link AXMAiDelegatedAgentTranscriptPopupComponent}.\n */\n@Injectable({ providedIn: 'root' })\nexport class AXMAiChatToolExecuteService {\n //#region ---- Services & Dependencies ----\n\n private readonly layoutBuilder = inject(AXPLayoutBuilderService);\n private readonly commandService = inject(AXPCommandService);\n private readonly queryService = inject(AXPQueryService);\n private readonly translateService = inject(AXTranslationService);\n private readonly toastService = inject(AXToastService);\n\n //#endregion\n\n //#region ---- Public API ----\n\n /**\n * Opens a layout-builder dialog to edit tool arguments and runs the command or query.\n */\n async openToolExecuteDialog(call: AXPAiToolCall): Promise<void> {\n const form = this.prepareToolExecuteForm(call.arguments);\n const jsonFieldLabel = await this.translateService.translateAsync('@ai-management:chat.tool-execute-json-field');\n const titleBase = await this.translateService.translateAsync('@ai-management:chat.tool-execute-dialog-title');\n const dialogTitle = `${titleBase} — ${call.name}`;\n const submitLabel = await this.translateService.translateAsync('@ai-management:chat.tool-execute-submit');\n const cancelLabel = await this.translateService.translateAsync('@general:actions.cancel.title');\n\n await this.layoutBuilder\n .create()\n .dialog<boolean>((dialog) => {\n dialog\n .setTitle(dialogTitle)\n .setSize('md')\n .setCloseButton(true)\n .setContext(form.initial)\n .content((flex) => {\n flex.setDirection('column').setGap('10px');\n this.appendToolExecuteFormFields(flex, form.parsed, jsonFieldLabel, form.useRootJson);\n })\n .setActions((actions) => {\n actions.cancel(cancelLabel).submit(submitLabel);\n })\n .onAction(async (dialogRef: AXPDialogRef) => {\n const act = dialogRef.action();\n if (act === 'cancel') {\n return false;\n }\n let payload: unknown;\n try {\n payload = this.denormalizeToolExecutePayload(\n dialogRef.context() as Record<string, unknown>,\n form.jsonStringKeys,\n form.useRootJson,\n call.name,\n );\n } catch (e) {\n const msg = e instanceof Error ? e.message : String(e);\n await this.toastService.show({\n color: 'danger',\n title: await this.translateService.translateAsync('@general:messages.error.title'),\n content: msg,\n });\n throw e instanceof Error ? e : new Error(msg);\n }\n await this.dispatchToolExecute(call.name, payload);\n return true;\n });\n })\n .show();\n }\n\n //#endregion\n\n //#region ---- Form & dispatch (private) ----\n\n private prepareToolExecuteForm(args: unknown): {\n parsed: Record<string, unknown>;\n initial: Record<string, unknown>;\n jsonStringKeys: string[];\n useRootJson: boolean;\n } {\n const emptyRoot = (): {\n parsed: Record<string, unknown>;\n initial: Record<string, unknown>;\n jsonStringKeys: string[];\n useRootJson: boolean;\n } => ({\n parsed: {},\n initial: { __rootJson: '{}' },\n jsonStringKeys: ['__rootJson'],\n useRootJson: true,\n });\n\n if (args === null || args === undefined) {\n return emptyRoot();\n }\n if (typeof args === 'string') {\n const trimmed = args.trim();\n if (!trimmed) {\n return emptyRoot();\n }\n try {\n return this.prepareToolExecuteForm(JSON.parse(trimmed) as unknown);\n } catch {\n return {\n parsed: { _raw: trimmed },\n initial: { _raw: trimmed },\n jsonStringKeys: [],\n useRootJson: false,\n };\n }\n }\n if (Array.isArray(args)) {\n return {\n parsed: {},\n initial: { __rootJson: JSON.stringify(args, null, 2) },\n jsonStringKeys: ['__rootJson'],\n useRootJson: true,\n };\n }\n if (typeof args === 'object') {\n const parsed = { ...(args as Record<string, unknown>) };\n const keys = Object.keys(parsed);\n if (keys.length === 0) {\n return emptyRoot();\n }\n const initial: Record<string, unknown> = {};\n const jsonStringKeys: string[] = [];\n for (const key of keys) {\n const val = parsed[key];\n if (val === null || val === undefined) {\n initial[key] = '';\n } else if (typeof val === 'boolean' || typeof val === 'number') {\n initial[key] = val;\n } else if (typeof val === 'string') {\n const trimmed = val.trim();\n if (\n (trimmed.startsWith('{') && trimmed.endsWith('}')) ||\n (trimmed.startsWith('[') && trimmed.endsWith(']'))\n ) {\n try {\n JSON.parse(trimmed);\n initial[key] = val;\n jsonStringKeys.push(key);\n } catch {\n initial[key] = val;\n }\n } else {\n initial[key] = val;\n }\n } else {\n initial[key] = JSON.stringify(val, null, 2);\n jsonStringKeys.push(key);\n }\n }\n return { parsed, initial, jsonStringKeys, useRootJson: false };\n }\n return {\n parsed: { _raw: args },\n initial: { _raw: String(args) },\n jsonStringKeys: [],\n useRootJson: false,\n };\n }\n\n private appendToolExecuteFormFields(\n flex: IFlexContainerBuilder,\n parsed: Record<string, unknown>,\n jsonFieldLabel: string,\n useRootJson: boolean,\n ): void {\n if (useRootJson) {\n flex.formField(jsonFieldLabel, (field) => {\n field.path('__rootJson');\n field.largeTextBox({ rows: 10, placeholder: '{}' });\n });\n return;\n }\n const keys = Object.keys(parsed);\n for (const key of keys) {\n const val = parsed[key];\n flex.formField(key, (field) => {\n field.path(key);\n if (val === null || val === undefined) {\n field.textBox({});\n } else if (typeof val === 'boolean') {\n field.toggleSwitch({});\n } else if (typeof val === 'number') {\n field.numberBox({});\n } else if (typeof val === 'string') {\n field.textBox({});\n } else {\n field.largeTextBox({ rows: 6 });\n }\n });\n }\n }\n\n private denormalizeToolExecutePayload(\n context: Record<string, unknown>,\n jsonStringKeys: string[],\n useRootJson: boolean,\n toolName: string,\n ): unknown {\n if (useRootJson) {\n const raw = String(context['__rootJson'] ?? '{}');\n return normalizeAiToolCommandArgs(JSON.parse(raw) as unknown, toolName);\n }\n const out: Record<string, unknown> = { ...context };\n for (const k of jsonStringKeys) {\n const raw = out[k];\n if (typeof raw === 'string') {\n try {\n out[k] = JSON.parse(raw) as unknown;\n } catch {\n /* keep string */\n }\n }\n }\n return normalizeAiToolCommandArgs(out, toolName);\n }\n\n private async dispatchToolExecute(toolName: string, payload: unknown): Promise<void> {\n const successTitle = await this.translateService.translateAsync('@ai-management:chat.tool-execute-done');\n const errTitle = await this.translateService.translateAsync('@general:messages.error.title');\n const notRegistered = await this.translateService.translateAsync('@ai-management:chat.tool-execute-not-registered');\n\n if (this.commandService.exists(toolName)) {\n const result = await this.commandService.execute(toolName, payload);\n const ok = result?.success !== false;\n let content: string;\n if (result?.message?.text != null) {\n const t = result.message.text;\n content =\n typeof t === 'string'\n ? t.startsWith('@')\n ? await this.translateService.translateAsync(t)\n : t\n : this.translateService.resolve(t);\n } else {\n content =\n result?.data !== undefined ? JSON.stringify(result.data, null, 2) : JSON.stringify(result, null, 2);\n }\n await this.toastService.show({\n color: ok ? 'success' : 'warning',\n title: ok ? successTitle : errTitle,\n content: content ?? '',\n });\n return;\n }\n if (this.queryService.exists(toolName)) {\n const input =\n payload != null && typeof payload === 'object' && !Array.isArray(payload)\n ? (payload as Record<string, unknown>)\n : {};\n const data = await this.queryService.fetch(toolName, input);\n await this.toastService.show({\n color: 'success',\n title: successTitle,\n content: data != null ? JSON.stringify(data, null, 2) : '—',\n });\n return;\n }\n\n await this.toastService.show({\n color: 'warning',\n title: errTitle,\n content: notRegistered,\n });\n }\n\n //#endregion\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { AXValueChangedEvent } from '@acorex/cdk/common';\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXPopupService } from '@acorex/components/popup';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXFormModule } from '@acorex/components/form';\nimport { AXTextAreaModule } from '@acorex/components/text-area';\nimport { AXFileService } from '@acorex/core/file';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport {\n type AXPAiDelegatedAgentTranscriptEntry,\n type AXPAiEffectiveAssistRow,\n type AXPAiChatResponse,\n type AXPAiDelegatedNestedToolCallContext,\n type AXPAiEngineRunEvent,\n type AXPAiEngineUsageTotals,\n type AXPAiToolCall,\n type AXPAiChatMessage,\n axpAiChatMessageGetText,\n axpAiChatTextMessage,\n axpAiChatToolOrAgentResultBodyJson,\n axpAiChatUserMessage,\n axpAiParseSupervisorAgentToolName,\n} from '../ai-engine.types';\nimport { axpAiAssistInitialMessagesToTranscript } from '../../utils/assist-initial-messages.util';\nimport { persistAiChatAttachmentImage } from '../image/ai-generated-image-persist';\nimport {\n AXM_AI_CHAT_COMPOSER_MAX_DOCUMENT_BYTES,\n AXM_AI_CHAT_COMPOSER_MAX_DOCUMENTS_PER_TURN,\n axmIsLikelyChatDocumentFile,\n axmMimeTypeForChatAttachment,\n} from '../assist/ai-chat-composer-media.helpers';\nimport { AXPEntityService } from '@acorex/platform/layout/entity';\nimport { AXPActionMenuItem, AXPExecuteCommand } from '@acorex/platform/core';\nimport { AXPFileStorageService } from '@acorex/platform/common';\nimport { AXPThemeLayoutBlockComponent } from '@acorex/platform/layout/components';\nimport { AXPLayoutBuilderService } from '@acorex/platform/layout/builder';\nimport { AXPPageLayoutBase, AXPPageLayoutBaseComponent, AXPPageLayoutComponent } from '@acorex/platform/layout/views';\nimport { AXPLayoutRendererComponent } from '@acorex/platform/layout/builder';\nimport { AXPWidgetCoreModule, type AXPWidgetNode, type AXPWidgetRenderMode } from '@acorex/platform/layout/widget-core';\nimport { CommonModule, isPlatformBrowser } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n OnInit,\n PLATFORM_ID,\n ViewEncapsulation,\n computed,\n inject,\n model,\n signal,\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport {\n AIMANAGEMENT_CHAT_GENERATE_IMAGE_COMMAND_KEY,\n AIMANAGEMENT_CHAT_SYNTHESIZE_SPEECH_COMMAND_KEY,\n} from '../../tools/ai-chat-tool.command-keys';\nimport { RootConfig } from '../../const';\nimport { AXPAiAssistChatModelCatalogService } from '../ai-assist-chat-model-catalog.service';\nimport { AXPAiManagerService } from '../ai-manager.service';\nimport { AXPAiPlatformRuntimeContextBuilder } from '../ai-platform-runtime-context.builder';\nimport {\n type AssistantParsedContent,\n parseAssistantContentForDisplay,\n parseAssistantMessageForDisplayFromMessage as axmParseAssistantMessageForDisplayFromMessage,\n} from './ai-chat-thinking.util';\nimport {\n axmBuildChatDisplayItems,\n type AXMAiChatToolCallPair,\n type AXMAiChatToolTurnItem,\n} from './ai-chat-display-items.build';\nimport { AXMAiChatToolAudioPreviewComponent } from './ai-chat-tool-audio-preview.component';\nimport { AXMAiChatToolImagePreviewComponent } from './ai-chat-tool-image-preview.component';\nimport { AXMAiChatToolExecuteService } from './ai-chat-tool-execute.service';\n\n//#endregion\n\n//#region ---- Types ----\n\ninterface AXMAiChatPageAgentRow {\n id: string;\n modelEntityId?: string | null;\n}\n\ninterface AXMAiModelListRow {\n id: string;\n name: string;\n title: string;\n chatTransport?: string;\n maxContextTokens?: number;\n inputPricePerMillion?: number;\n outputPricePerMillion?: number;\n cachedInputPricePerMillion?: number;\n}\n\ninterface AXMAiAssistPickerRow {\n id: string;\n name?: string;\n title: string;\n}\n\n/** Live status of a single tool call during engine execution (before final messages arrive). */\ninterface AXMAiLiveToolCallStatus {\n call: AXPAiToolCall;\n state: 'running' | 'done';\n resultContent?: string;\n}\n\n/** One image staged in the composer (not in the thread until send). */\ninterface AXMAiComposerDraftImage {\n clientId: string;\n /** Local preview only; revoked when the slot is removed or after send. */\n previewUrl: string;\n mimeType: string;\n name?: string;\n /** Set after {@link persistAiChatAttachmentImage} succeeds. */\n fileId?: string;\n}\n\n/** One audio file staged in the composer (not in the thread until send). */\ninterface AXMAiComposerDraftAudio {\n clientId: string;\n mimeType: string;\n name?: string;\n /** Set after {@link persistAiChatAttachmentImage} succeeds. */\n fileId?: string;\n}\n\n/** PDF / text / spreadsheet staged in the composer until send. */\ninterface AXMAiComposerDraftFile {\n clientId: string;\n mimeType: string;\n name?: string;\n fileId?: string;\n}\n\n/**\n * Specialist AiAgent whose assistant replies are a root {@link AXPWidgetNode} (JSON in `text` or a `node` segment).\n * Thread renders with `axp-widget-renderer` using the root `mode` when present.\n */\nconst AXM_AI_CHAT_LAYOUT_JSON_AGENT_ID = 'c0000001-0000-4000-8000-000000000008';\n\n/** Parsed delegated-agent (`agent:<id>`) tool result body for chat UI. */\ninterface AXMAiDelegatedAgentToolParsed {\n agentName?: string;\n answer?: string;\n error?: string;\n}\n\n//#endregion\n\n//#region ---- Component ----\n\n/**\n * AI chat page built with Acorex layout and form controls only (no conversation/chat shell component).\n */\n@Component({\n selector: 'axm-ai-chat-page',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n template: `\n <axp-page-layout [dir]=\"layoutDirection()\">\n <axp-page-content class=\"ax-flex ax-flex-col ax-min-h-0 ax-overflow-hidden\">\n <section\n class=\"ax-flex ax-flex-col ax-h-full ax-min-h-0 ax-bg-lightest dark:ax-bg-lighter\"\n >\n <!-- Message thread (ChatGPT-style: user pill on the end, assistant flush to surface) -->\n <div\n class=\"ax-flex-1 ax-min-h-[40vh] ax-overflow-y-auto\"\n role=\"log\"\n [attr.aria-label]=\"'@ai-management:chat.title' | translate | async\"\n >\n <div\n class=\"ax-mx-auto ax-w-full ax-px-4 ax-py-6 ax-space-y-8\"\n [class.ax-max-w-6xl]=\"threadUsesAssistLayout()\"\n [class.ax-max-w-3xl]=\"!threadUsesAssistLayout()\"\n >\n @if (messages().length === 0 && assistBootstrapMessages().length === 0) {\n <p class=\"ax-text-sm ax-text-muted ax-text-center ax-py-8\">\n {{ '@ai-management:chat.empty-hint' | translate | async }}\n </p>\n }\n @for (item of chatDisplayItems(); track $index) {\n @if (item.kind === 'tool-turn') {\n <div class=\"ax-w-full ax-min-w-0 ax-text-sm ax-leading-relaxed ax-text-on-lightest\">\n <div class=\"ax-flex ax-flex-col ax-gap-2 ax-min-w-0\">\n @if (\n !(\n toolTurnPreamblePlain(item) === '' &&\n item.pairs.length\n )\n ) {\n @let parsedTurn = toolTurnPreambleParsed(item);\n @if (parsedTurn.thinking) {\n <details\n class=\"ax-rounded ax-border ax-border-default/70 dark:ax-border-darker ax-bg-default-50/80 dark:ax-bg-default-100/50 ax-px-2 ax-py-1 ax-mb-1\"\n [attr.dir]=\"'auto'\"\n [attr.aria-label]=\"('@ai-management:chat.assistant-thinking-label' | translate | async) ?? ''\"\n >\n <summary\n class=\"ax-cursor-pointer ax-select-none ax-min-w-0 ax-text-xs ax-text-muted ax-outline-none focus-visible:ax-ring-2 focus-visible:ax-ring-primary-300 ax-line-clamp-1 ax-break-words\"\n >\n {{ parsedTurn.thinking }}\n </summary>\n <div\n class=\"ax-mt-2 ax-pt-2 ax-border-t ax-border-default/50 dark:ax-border-darker ax-text-xs ax-text-muted ax-whitespace-pre-wrap ax-break-words\"\n >\n {{ parsedTurn.thinking }}\n </div>\n </details>\n }\n @if (toolTurnPreambleAggregatedBodyVisible(item) && parsedTurn.body.trim()) {\n <div class=\"ax-whitespace-pre-line ax-break-words\" [attr.dir]=\"'auto'\">{{ parsedTurn.body }}</div>\n }\n @for (pm of item.preambleMessages; track $index) {\n @if (threadUsesLayoutJsonAgent() && assistantLayoutJsonWidgetNode(pm); as ljPreamble) {\n <div class=\"ax-min-w-0\" [attr.dir]=\"'auto'\">\n <ax-form>\n <axp-widgets-container [context]=\"layoutJsonAssistantEmptyContext\">\n <ng-container\n axp-widget-renderer\n [node]=\"ljPreamble\"\n [mode]=\"assistantLayoutJsonWidgetMode(pm)\"\n />\n </axp-widgets-container>\n </ax-form>\n </div>\n } @else if (asAssistantLayoutNode(pm); as preambleLayout) {\n <div class=\"ax-min-w-0\" [attr.dir]=\"'auto'\">\n <axp-layout-renderer [layout]=\"preambleLayout\" mode=\"view\" [context]=\"{}\" />\n </div>\n }\n }\n }\n @if (item.pairs.length) {\n <div class=\"ax-mt-1 ax-flex ax-flex-col ax-gap-2\">\n @for (p of item.pairs; track p.call.id) {\n @if (getGenerateImagePreview(p); as gimg) {\n <div\n class=\"ax-rounded-lg ax-border ax-border-default/70 dark:ax-border-darker ax-bg-lightest dark:ax-bg-default-50 ax-overflow-hidden ax-max-w-full\"\n >\n @if (gimg.fileId) {\n <axm-ai-chat-tool-image-preview\n [fileId]=\"gimg.fileId\"\n [altText]=\"gimg.alt\"\n [ariaLabel]=\"(('@ai-management:chat.generated-image-aria-label' | translate | async) ?? gimg.alt)\"\n />\n } @else if (gimg.imageUrl) {\n <img\n [src]=\"gimg.imageUrl\"\n [alt]=\"gimg.alt\"\n class=\"ax-block ax-max-w-full ax-h-auto ax-max-h-[min(70vh,32rem)]\"\n [attr.aria-label]=\"('@ai-management:chat.generated-image-aria-label' | translate | async) ?? gimg.alt\"\n />\n }\n </div>\n }\n @if (getSynthesizeSpeechPreview(p); as gaudio) {\n <div\n class=\"ax-rounded-lg ax-border ax-border-default/70 dark:ax-border-darker ax-bg-lightest dark:ax-bg-default-50 ax-p-3 ax-max-w-full\"\n >\n @if (gaudio.fileId) {\n <axm-ai-chat-tool-audio-preview\n [fileId]=\"gaudio.fileId\"\n [mimeType]=\"gaudio.mimeType\"\n [titleText]=\"gaudio.title\"\n [ariaLabel]=\"(('@ai-management:chat.generated-speech-aria-label' | translate | async) ?? gaudio.title)\"\n />\n }\n </div>\n }\n @if (showDelegatedAgentMiniChat(p.call.name)) {\n @let ar = parseDelegatedAgentToolResult(p.outputContent);\n <details\n class=\"ax-rounded-lg ax-border ax-border-default dark:ax-border-darker ax-bg-lightest/50 dark:ax-bg-default-50 ax-px-2 ax-py-1\"\n >\n <summary\n class=\"ax-cursor-pointer ax-select-none ax-text-xs ax-font-medium ax-outline-none focus-visible:ax-ring-2 focus-visible:ax-ring-primary-300 ax-flex ax-items-center ax-gap-2 ax-flex-wrap ax-min-w-0\"\n >\n @if (p.outputContent.trim()) {\n <span\n class=\"ax-inline-block ax-w-3 ax-h-3 ax-rounded-full ax-bg-success-500 ax-shrink-0\"\n aria-hidden=\"true\"\n ></span>\n } @else {\n <span\n class=\"ax-inline-block ax-w-3 ax-h-3 ax-rounded-full ax-bg-default-400 dark:ax-bg-default-500 ax-shrink-0\"\n aria-hidden=\"true\"\n ></span>\n }\n <span class=\"ax-inline-flex ax-items-baseline ax-gap-1 ax-min-w-0 ax-break-words\">\n <span>{{ '@ai-management:chat.agent-prefix' | translate | async }}:</span>\n @if (ar.agentName) {\n <span class=\"ax-font-semibold\">{{ ar.agentName }}</span>\n } @else if (p.outputContent.trim()) {\n <span class=\"ax-text-muted ax-font-normal\">{{\n '@ai-management:chat.agent-name-unknown' | translate | async\n }}</span>\n } @else {\n <span class=\"ax-text-muted ax-italic ax-font-normal\">{{\n '@ai-management:chat.tool-executing' | translate | async\n }}</span>\n }\n </span>\n @if (p.outputContent.trim()) {\n <span class=\"ax-text-success-600 dark:ax-text-success-400 ax-shrink-0\">\n {{ '@ai-management:chat.tool-done' | translate | async }}\n </span>\n }\n <span\n class=\"ax-inline-flex ax-shrink-0 ax-ms-auto\"\n (click)=\"$event.stopPropagation()\"\n (mousedown)=\"$event.stopPropagation()\"\n >\n <ax-button\n look=\"outline\"\n [text]=\"('@ai-management:chat.delegated-agent-detail' | translate | async) ?? ''\"\n [attr.aria-label]=\"('@ai-management:chat.delegated-agent-detail-aria' | translate | async) ?? ''\"\n (onClick)=\"openDelegatedAgentTranscriptDialog(p.call.id, p.call.name, ar.agentName)\"\n ></ax-button>\n </span>\n </summary>\n <div\n class=\"ax-mt-2 ax-space-y-3 ax-pt-2 ax-border-t ax-border-default/60 dark:ax-border-darker\"\n >\n <div class=\"ax-flex ax-justify-end ax-w-full ax-min-w-0\">\n <div\n class=\"ax-max-w-[min(92%,42rem)] ax-min-w-0 ax-rounded-[1.25rem] ax-px-4 ax-py-2.5 ax-text-sm ax-leading-relaxed ax-text-on-lightest ax-bg-default-300/95 dark:ax-bg-default-500/95 ax-shadow-sm ax-ring-1 ax-ring-inset ax-ring-default/20 dark:ax-ring-white/10\"\n >\n <div\n class=\"ax-whitespace-pre-wrap ax-break-words\"\n [attr.dir]=\"'auto'\"\n >\n {{ getAgentDelegatedPromptPreview(p.call.arguments) }}\n </div>\n </div>\n </div>\n <div\n class=\"ax-flex ax-flex-col ax-gap-2 ax-min-w-0 ax-text-sm ax-leading-relaxed ax-text-on-lightest\"\n >\n @if (ar.error) {\n <p class=\"ax-m-0 ax-text-danger-600 dark:ax-text-danger-400 ax-whitespace-pre-wrap ax-break-words\">\n {{ ar.error }}\n </p>\n } @else if (ar.answer) {\n <div class=\"ax-whitespace-pre-wrap ax-break-words\" [attr.dir]=\"'auto'\">\n {{ ar.answer }}\n </div>\n } @else if (p.outputContent.trim()) {\n <pre\n class=\"ax-m-0 ax-max-h-48 ax-overflow-auto ax-rounded ax-bg-default-50 dark:ax-bg-default-200 ax-p-2 ax-font-mono ax-text-[0.75rem] ax-leading-snug ax-whitespace-pre-wrap ax-break-words\"\n >{{ formatToolResultBody(p.outputContent) }}</pre\n >\n } @else {\n <p class=\"ax-m-0 ax-text-xs ax-text-muted ax-italic\">\n {{ '@ai-management:chat.tool-output-pending' | translate | async }}\n </p>\n }\n </div>\n </div>\n </details>\n } @else {\n <details\n class=\"ax-rounded ax-border ax-border-default dark:ax-border-darker ax-bg-lightest/50 dark:ax-bg-default-50 ax-px-2 ax-py-1\"\n >\n <summary\n class=\"ax-cursor-pointer ax-select-none ax-text-xs ax-font-medium ax-outline-none focus-visible:ax-ring-2 focus-visible:ax-ring-primary-300 ax-flex ax-items-center ax-gap-2 ax-flex-wrap\"\n >\n @if (p.outputContent.trim()) {\n <span\n class=\"ax-inline-block ax-w-3 ax-h-3 ax-rounded-full ax-bg-success-500 ax-shrink-0\"\n aria-hidden=\"true\"\n ></span>\n <code\n class=\"ax-px-1 ax-py-0.5 ax-rounded ax-bg-default-200 dark:ax-bg-default-300 ax-text-[0.8em] ax-text-on-lightest\"\n >{{ p.call.name }}</code\n >\n <span class=\"ax-text-success-600 dark:ax-text-success-400\">\n {{ '@ai-management:chat.tool-done' | translate | async }}\n </span>\n <span\n class=\"ax-ml-auto ax-inline-flex ax-shrink-0\"\n (click)=\"$event.stopPropagation()\"\n (mousedown)=\"$event.stopPropagation()\"\n >\n <ax-button\n look=\"outline\"\n [text]=\"('@ai-management:chat.tool-run-again' | translate | async) ?? ''\"\n (onClick)=\"openToolExecuteDialog(p.call)\"\n ></ax-button>\n </span>\n } @else {\n <span\n class=\"ax-inline-block ax-w-3 ax-h-3 ax-rounded-full ax-bg-default-400 dark:ax-bg-default-500 ax-shrink-0\"\n aria-hidden=\"true\"\n ></span>\n <code\n class=\"ax-px-1 ax-py-0.5 ax-rounded ax-bg-default-200 dark:ax-bg-default-300 ax-text-[0.8em] ax-text-on-lightest\"\n >{{ p.call.name }}</code\n >\n <span class=\"ax-text-muted ax-italic ax-text-[0.85em]\">\n {{ '@ai-management:chat.tool-output-pending' | translate | async }}\n </span>\n }\n </summary>\n <div class=\"ax-mt-2 ax-space-y-1 ax-pt-1 ax-border-t ax-border-default/60 dark:ax-border-darker\">\n <div class=\"ax-text-[0.7rem] ax-uppercase ax-tracking-wide ax-text-muted\">\n {{ '@ai-management:chat.tool-input' | translate | async }}\n </div>\n <pre\n class=\"ax-m-0 ax-max-h-48 ax-overflow-auto ax-rounded ax-bg-default-50 dark:ax-bg-default-200 ax-p-2 ax-font-mono ax-text-[0.7rem] ax-leading-snug ax-whitespace-pre-wrap ax-break-words\"\n >{{ formatToolArguments(p.call.arguments) }}</pre\n >\n <div class=\"ax-text-[0.7rem] ax-uppercase ax-tracking-wide ax-text-muted\">\n {{ '@ai-management:chat.tool-output' | translate | async }}\n </div>\n @if (p.outputContent.trim()) {\n <pre\n class=\"ax-m-0 ax-max-h-48 ax-overflow-auto ax-rounded ax-bg-default-50 dark:ax-bg-default-200 ax-p-2 ax-font-mono ax-text-[0.7rem] ax-leading-snug ax-whitespace-pre-wrap ax-break-words\"\n >{{ formatToolResultBody(p.outputContent) }}</pre\n >\n } @else {\n <p class=\"ax-m-0 ax-text-xs ax-text-muted ax-italic\">\n {{ '@ai-management:chat.tool-output-pending' | translate | async }}\n </p>\n }\n </div>\n </details>\n }\n }\n </div>\n }\n @if (item.followUpMessage; as followUp) {\n @let parsedFollowUp = parseAssistantMessageForDisplayFromMessage(followUp);\n @if (parsedFollowUp.thinking) {\n <details\n class=\"ax-rounded ax-border ax-border-default/70 dark:ax-border-darker ax-bg-default-50/80 dark:ax-bg-default-100/50 ax-px-2 ax-py-1\"\n [attr.dir]=\"'auto'\"\n [attr.aria-label]=\"('@ai-management:chat.assistant-thinking-label' | translate | async) ?? ''\"\n >\n <summary\n class=\"ax-cursor-pointer ax-select-none ax-min-w-0 ax-text-xs ax-text-muted ax-outline-none focus-visible:ax-ring-2 focus-visible:ax-ring-primary-300 ax-line-clamp-1 ax-break-words\"\n >\n {{ parsedFollowUp.thinking }}\n </summary>\n <div\n class=\"ax-mt-2 ax-pt-2 ax-border-t ax-border-default/50 dark:ax-border-darker ax-text-xs ax-text-muted ax-whitespace-pre-wrap ax-break-words\"\n >\n {{ parsedFollowUp.thinking }}\n </div>\n </details>\n }\n @if (\n !(threadUsesLayoutJsonAgent() && assistantLayoutJsonWidgetNode(followUp)) &&\n parsedFollowUp.body.trim()\n ) {\n <div class=\"ax-whitespace-pre-line ax-break-words\" [attr.dir]=\"'auto'\">{{ parsedFollowUp.body }}</div>\n }\n @if (threadUsesLayoutJsonAgent() && assistantLayoutJsonWidgetNode(followUp); as ljFollow) {\n <div class=\"ax-min-w-0\" [attr.dir]=\"'auto'\">\n <ax-form>\n <axp-widgets-container [context]=\"layoutJsonAssistantEmptyContext\">\n <ng-container\n axp-widget-renderer\n [node]=\"ljFollow\"\n [mode]=\"assistantLayoutJsonWidgetMode(followUp)\"\n />\n </axp-widgets-container>\n </ax-form>\n </div>\n } @else if (asAssistantLayoutNode(followUp); as followLayout) {\n <div class=\"ax-min-w-0\" [attr.dir]=\"'auto'\">\n <axp-layout-renderer [layout]=\"followLayout\" mode=\"view\" [context]=\"{}\" />\n </div>\n }\n }\n </div>\n </div>\n } @else {\n @if (item.message.role === 'user') {\n <div class=\"ax-w-full ax-flex ax-min-w-0\">\n <div\n class=\"ax-ms-auto ax-min-w-0 ax-rounded-[1.25rem] ax-text-sm ax-leading-relaxed ax-text-on-lightest ax-flex ax-flex-col ax-gap-2 ax-bg-default-300/95 dark:ax-bg-default-500/95 ax-shadow-sm ax-ring-1 ax-ring-inset ax-ring-default/20 dark:ax-ring-white/10\"\n [class.ax-max-w-[min(90%,52rem)]]=\"threadUsesAssistLayout()\"\n [class.ax-max-w-[min(85%,36rem)]]=\"!threadUsesAssistLayout()\"\n [class.ax-px-4]=\"!userMessageAttachmentOnlyBubble(item.message)\"\n [class.ax-py-2.5]=\"!userMessageAttachmentOnlyBubble(item.message)\"\n [class.ax-p-2]=\"userMessageAttachmentOnlyBubble(item.message)\"\n >\n <span class=\"ax-flex ax-flex-col ax-gap-2 ax-whitespace-pre-line ax-break-words ax-min-w-0\">\n @for (seg of item.message.responses; track $index) {\n @if (seg.type === 'image') {\n <span class=\"ax-flex ax-flex-col ax-gap-1 ax-min-w-0 ax-max-w-full\">\n <axm-ai-chat-tool-image-preview\n [fileId]=\"seg.content.fileId\"\n [altText]=\"seg.content.name?.trim() || 'Attached image'\"\n [ariaLabel]=\"(('@ai-management:chat.attached-image-aria-label' | translate | async) ?? '')\"\n />\n </span>\n } @else if (seg.type === 'audio') {\n <span\n class=\"ax-inline-flex ax-items-center ax-gap-2 ax-min-w-0 ax-max-w-full ax-rounded ax-border ax-border-default/60 dark:ax-border-darker ax-bg-default-50/80 dark:ax-bg-default-100/40 ax-px-3 ax-py-1.5 ax-text-sm\"\n >\n <span class=\"ax-text-muted ax-shrink-0\">{{\n '@ai-management:chat.attached-audio-label' | translate | async\n }}</span>\n <span class=\"ax-truncate ax-min-w-0\" [attr.title]=\"seg.content.name ?? ''\">{{\n seg.content.name?.trim() || ('@ai-management:chat.audio-untitled' | translate | async)\n }}</span>\n </span>\n } @else if (seg.type === 'file') {\n <span\n class=\"ax-inline-flex ax-items-center ax-gap-2 ax-min-w-0 ax-max-w-full ax-rounded ax-border ax-border-default/60 dark:ax-border-darker ax-bg-default-50/80 dark:ax-bg-default-100/40 ax-px-3 ax-py-1.5 ax-text-sm\"\n >\n <span class=\"ax-text-muted ax-shrink-0\">{{\n '@ai-management:chat.attached-document-label' | translate | async\n }}</span>\n <span class=\"ax-truncate ax-min-w-0\" [attr.title]=\"seg.content.name ?? ''\">{{\n seg.content.name?.trim() || ('@ai-management:chat.document-untitled' | translate | async)\n }}</span>\n </span>\n } @else if (seg.type === 'text') {\n <span class=\"ax-whitespace-pre-line\" [attr.dir]=\"'auto'\">{{ seg.content }}</span>\n }\n }\n </span>\n </div>\n </div>\n } @else {\n <div class=\"ax-w-full ax-min-w-0 ax-text-sm ax-leading-relaxed ax-text-on-lightest\">\n <div class=\"ax-flex ax-flex-col ax-gap-2 ax-whitespace-pre-line ax-break-words ax-min-w-0\">\n @if (item.message.role === 'tool') {\n <span [attr.dir]=\"'auto'\">{{ formatToolMessageSummary(item.message) }}</span>\n } @else if (item.message.role === 'assistant') {\n @let parsed = parseAssistantMessageForDisplayFromMessage(item.message);\n @if (parsed.thinking) {\n <details\n class=\"ax-rounded ax-border ax-border-default/70 dark:ax-border-darker ax-bg-default-50/80 dark:ax-bg-default-100/50 ax-px-2 ax-py-1\"\n [attr.dir]=\"'auto'\"\n [attr.aria-label]=\"('@ai-management:chat.assistant-thinking-label' | translate | async) ?? ''\"\n >\n <summary\n class=\"ax-cursor-pointer ax-select-none ax-min-w-0 ax-text-xs ax-text-muted ax-outline-none focus-visible:ax-ring-2 focus-visible:ax-ring-primary-300 ax-line-clamp-1 ax-break-words\"\n >\n {{ parsed.thinking }}\n </summary>\n <div\n class=\"ax-mt-2 ax-pt-2 ax-border-t ax-border-default/50 dark:ax-border-darker ax-text-xs ax-text-muted ax-whitespace-pre-wrap ax-break-words\"\n >\n {{ parsed.thinking }}\n </div>\n </details>\n }\n @if (\n !(threadUsesLayoutJsonAgent() && assistantLayoutJsonWidgetNode(item.message)) &&\n parsed.body.trim()\n ) {\n <span class=\"ax-whitespace-pre-line\" [attr.dir]=\"'auto'\">{{ parsed.body }}</span>\n }\n @if (threadUsesLayoutJsonAgent() && assistantLayoutJsonWidgetNode(item.message); as ljMsg) {\n <div class=\"ax-min-w-0\" [attr.dir]=\"'auto'\">\n <ax-form>\n <axp-widgets-container [context]=\"layoutJsonAssistantEmptyContext\">\n <ng-container\n axp-widget-renderer\n [node]=\"ljMsg\"\n [mode]=\"assistantLayoutJsonWidgetMode(item.message)\"\n />\n </axp-widgets-container>\n </ax-form>\n </div>\n } @else if (asAssistantLayoutNode(item.message); as layoutNode) {\n <div class=\"ax-min-w-0\" [attr.dir]=\"'auto'\">\n <axp-layout-renderer [layout]=\"layoutNode\" mode=\"view\" [context]=\"{}\" />\n </div>\n }\n } @else {\n <span [attr.dir]=\"'auto'\">{{ chatMessageText(item.message) }}</span>\n }\n </div>\n </div>\n }\n }\n }\n @if (\n isBusy() &&\n (liveToolCalls().length > 0 ||\n liveStatusHasAnyStreamingPreview() ||\n delegatedAgentReflectionLoading())\n ) {\n <div\n class=\"ax-w-full ax-min-w-0 ax-text-sm ax-leading-relaxed ax-text-on-lightest\"\n role=\"status\"\n aria-live=\"polite\"\n >\n <div class=\"ax-flex ax-flex-col ax-gap-2 ax-min-w-0\">\n @if (streamingThinkPreview().trim()) {\n <details\n class=\"ax-rounded ax-border ax-border-default/70 dark:ax-border-darker ax-bg-default-50/80 dark:ax-bg-default-100/50 ax-px-2 ax-py-1\"\n [attr.open]=\"true\"\n [attr.aria-label]=\"('@ai-management:chat.assistant-thinking-label' | translate | async) ?? ''\"\n >\n <summary\n class=\"ax-cursor-pointer ax-select-none ax-text-xs ax-text-muted ax-outline-none focus-visible:ax-ring-2 focus-visible:ax-ring-primary-300\"\n >\n {{ '@ai-management:chat.assistant-thinking-label' | translate | async }}\n </summary>\n <div\n class=\"ax-mt-2 ax-pt-2 ax-border-t ax-border-default/50 ax-text-xs ax-text-muted ax-whitespace-pre-wrap ax-break-words\"\n [attr.dir]=\"'auto'\"\n >\n {{ streamingThinkPreview() }}\n </div>\n </details>\n }\n @for (lt of liveToolCalls(); track lt.call.id) {\n @if (showDelegatedAgentMiniChat(lt.call.name)) {\n @let lar = parseDelegatedAgentToolResult(lt.resultContent ?? '');\n <details\n class=\"ax-rounded-lg ax-border ax-border-default dark:ax-border-darker ax-bg-lightest/50 dark:ax-bg-default-50 ax-px-2 ax-py-1\"\n [attr.open]=\"lt.state === 'running' ? true : null\"\n >\n <summary\n class=\"ax-cursor-pointer ax-select-none ax-text-xs ax-font-medium ax-outline-none focus-visible:ax-ring-2 focus-visible:ax-ring-primary-300 ax-flex ax-items-center ax-gap-2 ax-flex-wrap ax-min-w-0\"\n >\n @if (lt.state === 'running') {\n <span class=\"ax-inline-block ax-w-3 ax-h-3 ax-rounded-full ax-border-2 ax-border-primary-500 ax-border-t-transparent fa-solid fa-spinner ax-animate-twSpin ax-animate-infinite ax-shrink-0\"></span>\n } @else {\n <span class=\"ax-inline-block ax-w-3 ax-h-3 ax-rounded-full ax-bg-success-500 ax-shrink-0\"></span>\n }\n <span class=\"ax-inline-flex ax-items-baseline ax-gap-1 ax-min-w-0 ax-break-words\">\n <span>{{ '@ai-management:chat.agent-prefix' | translate | async }}:</span>\n @if (lar.agentName) {\n <span class=\"ax-font-semibold\">{{ lar.agentName }}</span>\n } @else if (lt.resultContent?.trim()) {\n <span class=\"ax-text-muted ax-font-normal\">{{\n '@ai-management:chat.agent-name-unknown' | translate | async\n }}</span>\n } @else {\n <span class=\"ax-text-muted ax-italic ax-font-normal\">{{\n '@ai-management:chat.tool-executing' | translate | async\n }}</span>\n }\n </span>\n <span [class]=\"lt.state === 'running' ? 'ax-text-muted ax-italic ax-shrink-0' : 'ax-text-success-600 dark:ax-text-success-400 ax-shrink-0'\">\n {{ (lt.state === 'running' ? '@ai-management:chat.tool-executing' : '@ai-management:chat.tool-done') | translate | async }}\n </span>\n <span\n class=\"ax-inline-flex ax-shrink-0 ax-ms-auto\"\n (click)=\"$event.stopPropagation()\"\n (mousedown)=\"$event.stopPropagation()\"\n >\n <ax-button\n look=\"outline\"\n [text]=\"('@ai-management:chat.delegated-agent-detail' | translate | async) ?? ''\"\n [attr.aria-label]=\"('@ai-management:chat.delegated-agent-detail-aria' | translate | async) ?? ''\"\n (onClick)=\"openDelegatedAgentTranscriptDialog(lt.call.id, lt.call.name, lar.agentName)\"\n ></ax-button>\n </span>\n </summary>\n <div\n class=\"ax-mt-2 ax-space-y-3 ax-pt-2 ax-border-t ax-border-default/60 dark:ax-border-darker\"\n >\n @let nestedLive = nestedDelegatedLiveToolCallsFor(lt.call.id);\n @let nestedStream = nestedDelegatedStreamingPreviewFor(lt.call.id);\n <div class=\"ax-flex ax-justify-end ax-w-full ax-min-w-0\">\n <div\n class=\"ax-max-w-[min(92%,42rem)] ax-min-w-0 ax-rounded-[1.25rem] ax-px-4 ax-py-2.5 ax-text-sm ax-leading-relaxed ax-text-on-lightest ax-bg-default-300/95 dark:ax-bg-default-500/95 ax-shadow-sm ax-ring-1 ax-ring-inset ax-ring-default/20 dark:ax-ring-white/10\"\n >\n <div class=\"ax-whitespace-pre-wrap ax-break-words\" [attr.dir]=\"'auto'\">\n {{ getAgentDelegatedPromptPreview(lt.call.arguments) }}\n </div>\n </div>\n </div>\n @if (nestedStream.length > 0) {\n <div class=\"ax-whitespace-pre-line ax-break-words\" [attr.dir]=\"'auto'\">{{ nestedStream }}</div>\n }\n @if (nestedLive.length > 0) {\n <div class=\"ax-flex ax-flex-col ax-gap-2 ax-min-w-0\">\n @for (nt of nestedLive; track nt.call.id) {\n <details\n class=\"ax-rounded ax-border ax-border-default dark:ax-border-darker ax-bg-lightest/50 dark:ax-bg-default-50 ax-px-2 ax-py-1\"\n [attr.open]=\"nt.state === 'running' ? true : null\"\n >\n <summary\n class=\"ax-cursor-pointer ax-select-none ax-text-xs ax-font-medium ax-outline-none focus-visible:ax-ring-2 focus-visible:ax-ring-primary-300 ax-flex ax-items-center ax-gap-2 ax-flex-wrap\"\n >\n @if (nt.state === 'running') {\n <span class=\"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\"></span>\n } @else {\n <span class=\"ax-inline-block ax-w-3 ax-h-3 ax-rounded-full ax-bg-success-500 ax-shrink-0\"></span>\n }\n <code class=\"ax-px-1 ax-py-0.5 ax-rounded ax-bg-default-200 dark:ax-bg-default-300 ax-text-[0.8em] ax-text-on-lightest\">{{ nt.call.name }}</code>\n <span [class]=\"nt.state === 'running' ? 'ax-text-muted ax-italic' : 'ax-text-success-600 dark:ax-text-success-400'\">\n {{ (nt.state === 'running' ? '@ai-management:chat.tool-executing' : '@ai-management:chat.tool-done') | translate | async }}\n </span>\n @if (nt.state === 'done') {\n <span\n class=\"ax-ml-auto ax-inline-flex ax-shrink-0\"\n (click)=\"$event.stopPropagation()\"\n (mousedown)=\"$event.stopPropagation()\"\n >\n <ax-button\n look=\"outline\"\n [text]=\"('@ai-management:chat.tool-run-again' | translate | async) ?? ''\"\n (onClick)=\"openToolExecuteDialog(nt.call)\"\n ></ax-button>\n </span>\n }\n </summary>\n <div class=\"ax-mt-2 ax-pt-1 ax-border-t ax-border-default/60 dark:ax-border-darker ax-space-y-1\">\n <div class=\"ax-text-[0.7rem] ax-uppercase ax-tracking-wide ax-text-muted\">\n {{ '@ai-management:chat.tool-input' | translate | async }}\n </div>\n <pre\n class=\"ax-m-0 ax-max-h-32 ax-overflow-auto ax-rounded ax-bg-default-50 dark:ax-bg-default-200 ax-p-2 ax-font-mono ax-text-[0.7rem] ax-leading-snug ax-whitespace-pre-wrap ax-break-words\"\n >{{ formatToolArguments(nt.call.arguments) }}</pre\n >\n @if (nt.resultContent) {\n <div class=\"ax-text-[0.7rem] ax-uppercase ax-tracking-wide ax-text-muted\">\n {{ '@ai-management:chat.tool-output' | translate | async }}\n </div>\n <pre\n class=\"ax-m-0 ax-max-h-32 ax-overflow-auto ax-rounded ax-bg-default-50 dark:ax-bg-default-200 ax-p-2 ax-font-mono ax-text-[0.7rem] ax-leading-snug ax-whitespace-pre-wrap ax-break-words\"\n >{{ formatToolResultBody(nt.resultContent) }}</pre\n >\n }\n </div>\n </details>\n }\n </div>\n }\n <div class=\"ax-flex ax-flex-col ax-gap-2 ax-min-w-0 ax-text-sm ax-leading-relaxed ax-text-on-lightest\">\n @if (lar.error) {\n <p class=\"ax-m-0 ax-text-danger-600 dark:ax-text-danger-400 ax-whitespace-pre-wrap ax-break-words\">\n {{ lar.error }}\n </p>\n } @else if (lar.answer) {\n <div class=\"ax-whitespace-pre-wrap ax-break-words\" [attr.dir]=\"'auto'\">{{ lar.answer }}</div>\n } @else if (lt.resultContent?.trim()) {\n <pre\n class=\"ax-m-0 ax-max-h-32 ax-overflow-auto ax-rounded ax-bg-default-50 dark:ax-bg-default-200 ax-p-2 ax-font-mono ax-text-[0.75rem] ax-leading-snug ax-whitespace-pre-wrap ax-break-words\"\n >{{ formatToolResultBody(lt.resultContent ?? '') }}</pre\n >\n } @else {\n <p class=\"ax-m-0 ax-text-xs ax-text-muted ax-italic\">\n {{ '@ai-management:chat.tool-output-pending' | translate | async }}\n </p>\n }\n </div>\n </div>\n </details>\n } @else {\n <details\n class=\"ax-rounded ax-border ax-border-default dark:ax-border-darker ax-bg-lightest/50 dark:ax-bg-default-50 ax-px-2 ax-py-1\"\n [attr.open]=\"lt.state === 'running' ? true : null\"\n >\n <summary\n class=\"ax-cursor-pointer ax-select-none ax-text-xs ax-font-medium ax-outline-none focus-visible:ax-ring-2 focus-visible:ax-ring-primary-300 ax-flex ax-items-center ax-gap-2 ax-flex-wrap\"\n >\n @if (lt.state === 'running') {\n <span class=\"ax-inline-block ax-w-3 ax-h-3 ax-rounded-full ax-border-2 ax-border-primary-500 ax-border-t-transparent fa-solid fa-spinner ax-animate-twSpin ax-animate-infinite ax-shrink-0\"></span>\n } @else {\n <span class=\"ax-inline-block ax-w-3 ax-h-3 ax-rounded-full ax-bg-success-500 ax-shrink-0\"></span>\n }\n <code class=\"ax-px-1 ax-py-0.5 ax-rounded ax-bg-default-200 dark:ax-bg-default-300 ax-text-[0.8em] ax-text-on-lightest\">{{ lt.call.name }}</code>\n <span [class]=\"lt.state === 'running' ? 'ax-text-muted ax-italic' : 'ax-text-success-600 dark:ax-text-success-400'\">\n {{ (lt.state === 'running' ? '@ai-management:chat.tool-executing' : '@ai-management:chat.tool-done') | translate | async }}\n </span>\n @if (lt.state === 'done') {\n <span\n class=\"ax-ml-auto ax-inline-flex ax-shrink-0\"\n (click)=\"$event.stopPropagation()\"\n (mousedown)=\"$event.stopPropagation()\"\n >\n <ax-button\n look=\"outline\"\n [text]=\"('@ai-management:chat.tool-run-again' | translate | async) ?? ''\"\n (onClick)=\"openToolExecuteDialog(lt.call)\"\n ></ax-button>\n </span>\n }\n </summary>\n <div class=\"ax-mt-2 ax-pt-1 ax-border-t ax-border-default/60 dark:ax-border-darker ax-space-y-1\">\n <div class=\"ax-text-[0.7rem] ax-uppercase ax-tracking-wide ax-text-muted\">\n {{ '@ai-management:chat.tool-input' | translate | async }}\n </div>\n <pre\n class=\"ax-m-0 ax-max-h-32 ax-overflow-auto ax-rounded ax-bg-default-50 dark:ax-bg-default-200 ax-p-2 ax-font-mono ax-text-[0.7rem] ax-leading-snug ax-whitespace-pre-wrap ax-break-words\"\n >{{ formatToolArguments(lt.call.arguments) }}</pre\n >\n @if (lt.resultContent) {\n <div class=\"ax-text-[0.7rem] ax-uppercase ax-tracking-wide ax-text-muted\">\n {{ '@ai-management:chat.tool-output' | translate | async }}\n </div>\n <pre\n class=\"ax-m-0 ax-max-h-32 ax-overflow-auto ax-rounded ax-bg-default-50 dark:ax-bg-default-200 ax-p-2 ax-font-mono ax-text-[0.7rem] ax-leading-snug ax-whitespace-pre-wrap ax-break-words\"\n >{{ formatToolResultBody(lt.resultContent) }}</pre\n >\n }\n </div>\n </details>\n }\n }\n @if (delegatedAgentReflectionLoading()) {\n <div\n class=\"ax-flex ax-items-center ax-gap-2 ax-text-xs ax-text-muted ax-italic\"\n role=\"status\"\n aria-live=\"polite\"\n >\n <span\n class=\"ax-inline-block ax-w-3 ax-h-3 ax-rounded-full ax-border-2 ax-border-primary-500 ax-border-t-transparent fa-solid fa-spinner ax-animate-twSpin ax-animate-infinite ax-shrink-0\"\n ></span>\n <span>{{ '@ai-management:chat.delegated-agent-reflecting' | translate | async }}</span>\n </div>\n }\n </div>\n </div>\n }\n </div>\n </div>\n\n <!-- Context meter & usage -->\n <div\n class=\"ax-flex ax-items-center ax-gap-3 ax-flex-wrap ax-justify-between ax-px-4 ax-py-2 ax-border-t ax-border-default/70 dark:ax-border-darker ax-bg-lightest dark:ax-bg-lighter ax-text-xs ax-text-muted\"\n [attr.aria-label]=\"('@ai-management:chat.context-used' | translate | async) ?? ''\"\n >\n <div class=\"ax-flex ax-shrink-0 ax-items-center ax-gap-2\">\n <ax-button\n look=\"outline\"\n color=\"secondary\"\n [text]=\"('@ai-management:chat.logs' | translate | async) ?? ''\"\n [attr.aria-label]=\"('@ai-management:chat.logs' | translate | async) ?? ''\"\n (onClick)=\"openMessagesLogDialog()\"\n ></ax-button>\n <ax-button\n look=\"outline\"\n color=\"secondary\"\n [text]=\"('@ai-management:chat.download-json' | translate | async) ?? ''\"\n [attr.aria-label]=\"('@ai-management:chat.download-json' | translate | async) ?? ''\"\n (onClick)=\"downloadMessagesJson()\"\n ></ax-button>\n </div>\n <div\n class=\"ax-flex ax-flex-1 ax-min-w-0 ax-items-center ax-gap-3 ax-flex-wrap ax-justify-end\"\n >\n @if (lastUsageTotals(); as totals) {\n <span class=\"ax-hidden sm:ax-flex ax-items-center ax-gap-1 ax-tabular-nums\">\n <span class=\"ax-font-medium ax-text-on-lightest\">{{ '@ai-management:chat.usage-prompt' | translate | async }}:</span>\n <span>{{ totals.promptTokens | number }}</span>\n @if (totals.cachedPromptTokens) {\n <span class=\"ax-text-success-600 dark:ax-text-success-400\">({{ '@ai-management:chat.usage-cached' | translate | async }}: {{ totals.cachedPromptTokens | number }})</span>\n }\n <span class=\"ax-mx-1\">|</span>\n <span class=\"ax-font-medium ax-text-on-lightest\">{{ '@ai-management:chat.usage-completion' | translate | async }}:</span>\n <span>{{ totals.completionTokens | number }}</span>\n </span>\n }\n @if (estimatedCostLabel(); as cost) {\n <span\n class=\"ax-font-medium ax-tabular-nums ax-text-warning-700 dark:ax-text-warning-300\"\n [attr.title]=\"('@ai-management:chat.cost-tooltip' | translate | async) ?? ''\"\n >{{ cost }}</span>\n }\n <span class=\"ax-hidden sm:ax-inline\">{{\n '@ai-management:chat.context-used' | translate | async\n }}</span>\n <svg class=\"ax-shrink-0\" width=\"40\" height=\"40\" viewBox=\"0 0 36 36\" aria-hidden=\"true\">\n <circle\n cx=\"18\"\n cy=\"18\"\n r=\"15.915\"\n fill=\"none\"\n class=\"ax-stroke-default-200 dark:ax-stroke-default-300\"\n stroke-width=\"3\"\n />\n <circle\n cx=\"18\"\n cy=\"18\"\n r=\"15.915\"\n fill=\"none\"\n class=\"ax-stroke-primary-500\"\n stroke-width=\"3\"\n stroke-linecap=\"round\"\n transform=\"rotate(-90 18 18)\"\n [attr.stroke-dasharray]=\"contextMeterCircumference()\"\n [attr.stroke-dashoffset]=\"contextMeterStrokeDashOffset()\"\n />\n </svg>\n @if (contextMeterPercent() !== null) {\n <span class=\"ax-font-medium ax-tabular-nums ax-text-on-lightest\">{{ contextMeterPercent() }}%</span>\n } @else {\n <span>{{ '@ai-management:chat.context-meter-unknown' | translate | async }}</span>\n }\n </div>\n </div>\n\n <!-- Composer -->\n <div\n class=\"ax-border-t ax-border-default dark:ax-border-darkest ax-p-4 ax-bg-lightest dark:ax-bg-lighter ax-flex ax-flex-col ax-gap-3\"\n >\n @if (draftComposerImages().length > 0 || draftComposerAudios().length > 0 || draftComposerFiles().length > 0 || isComposerSaving()) {\n <div\n class=\"ax-rounded-lg ax-border ax-border-default/70 dark:ax-border-darker ax-bg-default-50/80 dark:ax-bg-default-100/40 ax-p-2 ax-flex ax-flex-col ax-gap-2\"\n [attr.aria-label]=\"('@ai-management:chat.composer-attachments-region' | translate | async) ?? ''\"\n >\n <div class=\"ax-flex ax-flex-wrap ax-items-center ax-justify-between ax-gap-2 ax-text-xs ax-text-muted\">\n <span>\n @if (isComposerSaving()) {\n {{ '@ai-management:chat.composer-uploading' | translate | async }}\n } @else {\n @if (draftComposerImages().length > 0) {\n <span>{{ draftComposerImages().length }} {{ '@ai-management:chat.composer-images-count' | translate | async }}</span>\n }\n @if (draftComposerImages().length > 0 && draftComposerAudios().length > 0) {\n <span class=\"ax-mx-1\">·</span>\n }\n @if (draftComposerAudios().length > 0) {\n <span>{{ draftComposerAudios().length }} {{ '@ai-management:chat.composer-audio-count' | translate | async }}</span>\n }\n @if (draftComposerFiles().length > 0) {\n @if (draftComposerImages().length > 0 || draftComposerAudios().length > 0) {\n <span class=\"ax-mx-1\">·</span>\n }\n <span>{{ draftComposerFiles().length }} {{ '@ai-management:chat.composer-documents-count' | translate | async }}</span>\n }\n }\n </span>\n </div>\n @if (draftComposerImages().length > 0) {\n <div class=\"ax-flex ax-flex-wrap ax-gap-2\">\n @for (slot of draftComposerImages(); track slot.clientId) {\n <div\n class=\"ax-relative ax-h-16 ax-w-16 ax-shrink-0 ax-overflow-hidden ax-rounded-md ax-border ax-border-default/60 dark:ax-border-darker ax-bg-lightest\"\n >\n <img\n [src]=\"slot.previewUrl\"\n [alt]=\"slot.name ?? ''\"\n class=\"ax-h-full ax-w-full ax-object-cover\"\n />\n @if (!slot.fileId) {\n <span\n class=\"ax-absolute ax-inset-0 ax-flex ax-items-center ax-justify-center ax-bg-default/40 ax-text-[0.65rem] ax-font-medium ax-text-on-lightest\"\n >…</span\n >\n }\n <button\n type=\"button\"\n class=\"ax-absolute ax-end-0.5 ax-top-0.5 ax-flex ax-h-5 ax-w-5 ax-items-center ax-justify-center ax-rounded ax-bg-default/80 ax-text-[0.7rem] ax-leading-none ax-text-on-lightest hover:ax-bg-default focus-visible:ax-outline-none focus-visible:ax-ring-2 focus-visible:ax-ring-primary-400\"\n [disabled]=\"isBusy() || isComposerSaving()\"\n [attr.aria-label]=\"('@ai-management:chat.remove-draft-image' | translate | async) ?? ''\"\n (click)=\"removeDraftImage(slot.clientId)\"\n >\n ×\n </button>\n </div>\n }\n </div>\n }\n @if (draftComposerAudios().length > 0) {\n <div class=\"ax-flex ax-flex-col ax-gap-1\">\n @for (slot of draftComposerAudios(); track slot.clientId) {\n <div\n class=\"ax-flex ax-items-center ax-justify-between ax-gap-2 ax-rounded ax-border ax-border-default/60 dark:ax-border-darker ax-bg-lightest ax-px-2 ax-py-1.5 ax-text-xs ax-min-w-0\"\n >\n <span class=\"ax-truncate ax-text-on-lightest\" [attr.title]=\"slot.name ?? ''\">\n {{ '@ai-management:chat.attached-audio-label' | translate | async }}:\n {{ slot.name?.trim() || ('@ai-management:chat.audio-untitled' | translate | async) }}\n </span>\n @if (!slot.fileId) {\n <span class=\"ax-text-muted ax-shrink-0\">…</span>\n }\n <button\n type=\"button\"\n class=\"ax-shrink-0 ax-flex ax-h-6 ax-w-6 ax-items-center ax-justify-center ax-rounded ax-bg-default/80 ax-text-[0.85rem] ax-leading-none ax-text-on-lightest hover:ax-bg-default focus-visible:ax-outline-none focus-visible:ax-ring-2 focus-visible:ax-ring-primary-400\"\n [disabled]=\"isBusy() || isComposerSaving()\"\n [attr.aria-label]=\"('@ai-management:chat.remove-draft-audio' | translate | async) ?? ''\"\n (click)=\"removeDraftAudio(slot.clientId)\"\n >\n ×\n </button>\n </div>\n }\n </div>\n }\n @if (draftComposerFiles().length > 0) {\n <div class=\"ax-flex ax-flex-col ax-gap-1\">\n @for (slot of draftComposerFiles(); track slot.clientId) {\n <div\n class=\"ax-flex ax-items-center ax-justify-between ax-gap-2 ax-rounded ax-border ax-border-default/60 dark:ax-border-darker ax-bg-lightest ax-px-2 ax-py-1.5 ax-text-xs ax-min-w-0\"\n >\n <span class=\"ax-truncate ax-text-on-lightest\" [attr.title]=\"slot.name ?? ''\">\n {{ '@ai-management:chat.attached-document-label' | translate | async }}:\n {{ slot.name?.trim() || ('@ai-management:chat.document-untitled' | translate | async) }}\n </span>\n @if (!slot.fileId) {\n <span class=\"ax-text-muted ax-shrink-0\">…</span>\n }\n <button\n type=\"button\"\n class=\"ax-shrink-0 ax-flex ax-h-6 ax-w-6 ax-items-center ax-justify-center ax-rounded ax-bg-default/80 ax-text-[0.85rem] ax-leading-none ax-text-on-lightest hover:ax-bg-default focus-visible:ax-outline-none focus-visible:ax-ring-2 focus-visible:ax-ring-primary-400\"\n [disabled]=\"isBusy() || isComposerSaving()\"\n [attr.aria-label]=\"('@ai-management:chat.remove-draft-document' | translate | async) ?? ''\"\n (click)=\"removeDraftFile(slot.clientId)\"\n >\n ×\n </button>\n </div>\n }\n </div>\n }\n </div>\n }\n\n <ax-form-field>\n <ax-text-area\n [rows]=\"4\"\n [disabled]=\"isBusy()\"\n [ngModel]=\"input()\"\n (onValueChanged)=\"onComposerValueChanged($event)\"\n [placeholder]=\"('@ai-management:chat.placeholder' | translate | async) ?? ''\"\n ></ax-text-area>\n </ax-form-field>\n\n <div class=\"ax-flex ax-flex-col ax-gap-2 sm:ax-flex-row sm:ax-items-center sm:ax-justify-end\">\n <div class=\"ax-inline-flex ax-w-full ax-min-h-10 sm:ax-w-auto sm:ax-shrink-0 ax-flex-wrap ax-gap-2\">\n <ax-button\n class=\"ax-w-full sm:ax-w-auto\"\n look=\"outline\"\n color=\"secondary\"\n type=\"button\"\n [disabled]=\"isBusy() || isComposerSaving()\"\n [text]=\"('@ai-management:chat.upload-images' | translate | async) ?? ''\"\n [attr.aria-label]=\"('@ai-management:chat.upload-images-aria' | translate | async) ?? ''\"\n (onClick)=\"openChatImagePicker()\"\n ></ax-button>\n <ax-button\n class=\"ax-w-full sm:ax-w-auto\"\n look=\"outline\"\n color=\"secondary\"\n type=\"button\"\n [disabled]=\"isBusy() || isComposerSaving()\"\n [text]=\"('@ai-management:chat.upload-audio' | translate | async) ?? ''\"\n [attr.aria-label]=\"('@ai-management:chat.upload-audio-aria' | translate | async) ?? ''\"\n (onClick)=\"openChatAudioPicker()\"\n ></ax-button>\n <ax-button\n class=\"ax-w-full sm:ax-w-auto\"\n look=\"outline\"\n color=\"secondary\"\n type=\"button\"\n [disabled]=\"isBusy() || isComposerSaving()\"\n [text]=\"('@ai-management:chat.upload-documents' | translate | async) ?? ''\"\n [attr.aria-label]=\"('@ai-management:chat.upload-documents-aria' | translate | async) ?? ''\"\n (onClick)=\"openChatDocumentPicker()\"\n ></ax-button>\n </div>\n <ax-button\n class=\"ax-w-full sm:ax-flex-1 sm:ax-max-w-md\"\n color=\"primary\"\n [disabled]=\"isBusy() || !canSend()\"\n [text]=\"\n isBusy()\n ? ('@ai-management:chat.sending' | translate | async)\n : ('@ai-management:chat.send' | translate | async)\n \"\n (onClick)=\"send()\"\n ></ax-button>\n </div>\n </div>\n </section>\n </axp-page-content>\n </axp-page-layout>\n `,\n imports: [\n CommonModule,\n FormsModule,\n AXButtonModule,\n AXFormModule,\n AXDecoratorModule,\n AXTextAreaModule,\n AXTranslationModule,\n AXMAiChatToolImagePreviewComponent,\n AXMAiChatToolAudioPreviewComponent,\n AXPPageLayoutComponent,\n AXPThemeLayoutBlockComponent,\n AXPLayoutRendererComponent,\n AXPWidgetCoreModule,\n ],\n providers: [{ provide: AXPPageLayoutBase, useExisting: AXMAiChatPageComponent }],\n})\nexport class AXMAiChatPageComponent extends AXPPageLayoutBaseComponent implements OnInit {\n //#region ---- Services & Dependencies ----\n\n private readonly aiManager = inject(AXPAiManagerService);\n private readonly modelCatalog = inject(AXPAiAssistChatModelCatalogService);\n private readonly entityService = inject(AXPEntityService);\n\n private readonly agentData = this.entityService\n .withEntity(RootConfig.module.name, RootConfig.entities.agent.name)\n .data<string, AXMAiChatPageAgentRow, AXMAiChatPageAgentRow, AXMAiChatPageAgentRow, AXMAiChatPageAgentRow>();\n private readonly route = inject(ActivatedRoute);\n private readonly router = inject(Router);\n private readonly layoutBuilder = inject(AXPLayoutBuilderService);\n private readonly platformId = inject(PLATFORM_ID);\n private readonly fileStorage = inject(AXPFileStorageService);\n /** File picker API shared with platform file-uploader (`AXFileService.choose`, upload-from-computer action). */\n private readonly fileService = inject(AXFileService);\n private readonly popupService = inject(AXPopupService);\n private readonly chatToolExecute = inject(AXMAiChatToolExecuteService);\n private readonly platformRuntimeContextBuilder = inject(AXPAiPlatformRuntimeContextBuilder);\n\n //#endregion\n\n //#region ---- State ----\n\n /**\n * Stable reference for `axp-widgets-container` context (inline `{}` would be a new object each CD).\n */\n protected readonly layoutJsonAssistantEmptyContext: Record<string, unknown> = {};\n\n /**\n * Parsed widget roots keyed by message responses fingerprint so `axp-widget-renderer` keeps a stable\n * `node` reference across change detection (avoids ngOnChanges re-render loops).\n */\n private readonly layoutJsonParsedWidgetCache = new Map<string, AXPWidgetNode | null>();\n\n /** Primary key of the selected Assist row (supervisor chat). Cleared when {@link selectedDirectAgentId} is set. */\n readonly selectedAssistId = model<string | undefined>(undefined);\n\n /**\n * Direct AiAgent specialist chat (registry tools, classic tool I/O UI). Cleared when an assist is selected.\n */\n readonly selectedDirectAgentId = model<string | undefined>(undefined);\n\n /** Wide layout + delegated-agent mini-chat blocks (assist / supervisor mode only). */\n readonly threadUsesAssistLayout = computed(() => !this.selectedDirectAgentId()?.trim());\n\n /**\n * Direct chat with the layout-JSON specialist agent (see `AXM_AI_CHAT_LAYOUT_JSON_AGENT_ID`):\n * assistant output is a widget JSON root rendered via {@link assistantLayoutJsonWidgetNode} and the axp-widget-renderer directive.\n */\n readonly threadUsesLayoutJsonAgent = computed(\n () => this.selectedDirectAgentId()?.trim() === AXM_AI_CHAT_LAYOUT_JSON_AGENT_ID,\n );\n\n readonly messages = signal<AXPAiChatMessage[]>([]);\n\n /**\n * Assist-configured greeting lines shown in the thread but **not** sent to the agent.\n * Keeping them out of {@link messages} avoids a duplicate assistant reply after the first user turn.\n */\n readonly assistBootstrapMessages = signal<AXPAiChatMessage[]>([]);\n\n /**\n * Merges each assistant message that requested tools with the following tool-role messages\n * so the thread can show one collapsible I/O block per tool call.\n */\n readonly chatDisplayItems = computed(() => {\n const bootstrap = this.assistBootstrapMessages();\n const fromBootstrap = bootstrap.map((message) => ({\n kind: 'simple' as const,\n message,\n }));\n return [...fromBootstrap, ...axmBuildChatDisplayItems(this.messages())];\n });\n\n /** Bootstrap + conversation (for JSON export / debug dialog). */\n readonly fullTranscriptMessages = computed(() => [\n ...this.assistBootstrapMessages(),\n ...this.messages(),\n ]);\n\n readonly input = signal('');\n\n /**\n * Groups image lines + optional text for one multimodal send; set on first file pick in a turn.\n */\n readonly draftAttachmentGroupId = signal<string | null>(null);\n\n /**\n * Images chosen for the next message (shown above the composer with instant local previews).\n * Not part of {@link messages} until the user sends.\n */\n readonly draftComposerImages = signal<AXMAiComposerDraftImage[]>([]);\n\n /** Audio files chosen for the next message (persisted like images). */\n readonly draftComposerAudios = signal<AXMAiComposerDraftAudio[]>([]);\n\n /** Documents (PDF, text, etc.) for the next message. */\n readonly draftComposerFiles = signal<AXMAiComposerDraftFile[]>([]);\n\n /** True while files are being saved to storage after picker closes. */\n readonly isComposerSaving = signal(false);\n\n readonly isBusy = signal(false);\n readonly layoutDirection = signal<'ltr' | 'rtl'>('ltr');\n readonly assistLoadError = signal(false);\n readonly effectiveAssist = signal<AXPAiEffectiveAssistRow | null>(null);\n\n /** Resolved AiModel catalog row id for metrics (assist {@link AXPAiEffectiveAssistRow.modelId} or agent `modelEntityId`). */\n readonly selectedModelId = model<string | undefined>(undefined);\n\n /** Full chat catalog (for pricing / context meter on the active resolved model). */\n readonly modelRows = signal<AXMAiModelListRow[]>([]);\n\n /** Last aggregated token usage from the agent run (for context meter). */\n readonly lastUsageTotals = signal<AXPAiEngineUsageTotals | null>(null);\n\n /**\n * Specialist sub-run transcripts keyed by supervisor tool_call id (merged from each {@link AXPAiManagerService.runEngine} result).\n */\n readonly delegatedTranscriptsByCallId = signal<Record<string, AXPAiDelegatedAgentTranscriptEntry>>({});\n\n /** Incremental assistant text while the provider streams (OpenAI SSE); main turn only. */\n readonly streamingAssistantPreview = signal('');\n\n /**\n * Incremental planning/reasoning text while the planning turn streams; see {@link AXPAiEngineRunEvent} `segment: 'think'`.\n */\n readonly streamingThinkPreview = signal('');\n\n /**\n * Incremental assistant text streamed inside a delegated `agent:*` sub-run, keyed by supervisor tool_call id.\n * Kept separate from {@link streamingAssistantPreview} so specialist text stays in the delegation collapse.\n */\n private readonly delegatedNestedStreamingPreview = signal<Map<string, string>>(new Map());\n\n /** True when supervisor preview or any delegated nested stream has visible text (live status strip). */\n readonly liveStatusHasAnyStreamingPreview = computed(() => {\n if (this.streamingAssistantPreview().length > 0 || this.streamingThinkPreview().length > 0) {\n return true;\n }\n for (const text of this.delegatedNestedStreamingPreview().values()) {\n if (text.length > 0) {\n return true;\n }\n }\n return false;\n });\n\n /** Live tool execution status during an active agent run (cleared when run completes). */\n readonly liveToolCalls = signal<AXMAiLiveToolCallStatus[]>([]);\n\n /**\n * Nested registry tool calls inside a delegated `agent:*` run, keyed by the supervisor tool_call id\n * (same id as the parent collapse / transcript). Not mixed into {@link liveToolCalls}.\n */\n private readonly delegatedNestedLiveToolCalls = signal<Map<string, AXMAiLiveToolCallStatus[]>>(\n new Map(),\n );\n\n /** Delegated agent sub-run: tool-free reflection after a tool result (shows loading only). */\n readonly delegatedAgentReflectionLoading = signal(false);\n\n readonly selectedModelRow = computed(() => {\n const id = this.selectedModelId()?.trim();\n if (!id) {\n return undefined;\n }\n return this.modelRows().find((r) => r.id === id);\n });\n\n readonly contextMeterPercent = computed(() => {\n const totals = this.lastUsageTotals();\n const max = this.selectedModelRow()?.maxContextTokens;\n if (totals == null || !max || max <= 0) {\n return null;\n }\n return Math.min(100, Math.round((totals.totalTokens / max) * 100));\n });\n\n /** Estimated session cost in USD based on model pricing and token totals. */\n readonly estimatedCostUsd = computed(() => {\n const totals = this.lastUsageTotals();\n const model = this.selectedModelRow();\n if (!totals || !model) {\n return null;\n }\n const inputRate = model.inputPricePerMillion ?? 0;\n const outputRate = model.outputPricePerMillion ?? 0;\n const cachedRate = model.cachedInputPricePerMillion ?? inputRate;\n if (inputRate <= 0 && outputRate <= 0) {\n return null;\n }\n const cachedPrompt = totals.cachedPromptTokens ?? 0;\n const nonCachedPrompt = Math.max(0, totals.promptTokens - cachedPrompt);\n const inputCost = (nonCachedPrompt / 1_000_000) * inputRate;\n const cachedCost = (cachedPrompt / 1_000_000) * cachedRate;\n const outputCost = (totals.completionTokens / 1_000_000) * outputRate;\n return inputCost + cachedCost + outputCost;\n });\n\n /** Formats the estimated cost as a short string (e.g. \"$0.0012\"). */\n readonly estimatedCostLabel = computed(() => {\n const cost = this.estimatedCostUsd();\n if (cost === null) {\n return null;\n }\n if (cost < 0.0001) {\n return '$0.0000';\n }\n if (cost < 0.01) {\n return `$${cost.toFixed(4)}`;\n }\n return `$${cost.toFixed(2)}`;\n });\n\n private static readonly contextMeterR = 15.915;\n\n readonly contextMeterCircumference = computed(\n () => Math.round(2 * Math.PI * AXMAiChatPageComponent.contextMeterR * 1000) / 1000,\n );\n\n readonly contextMeterStrokeDashOffset = computed(() => {\n const c = this.contextMeterCircumference();\n const p = this.contextMeterPercent();\n if (p === null) {\n return c;\n }\n return c * (1 - p / 100);\n });\n\n /** Send enabled when there is composer text or staged images/audio (all saved to storage). */\n readonly canSend = computed(() => {\n if (this.isBusy() || this.isComposerSaving()) {\n return false;\n }\n const textOk = this.input().trim().length > 0;\n const draftImg = this.draftComposerImages();\n const draftAud = this.draftComposerAudios();\n const draftFiles = this.draftComposerFiles();\n const allImagesSaved =\n draftImg.length === 0 || draftImg.every((s) => Boolean(s.fileId?.trim()));\n const allAudiosSaved =\n draftAud.length === 0 || draftAud.every((s) => Boolean(s.fileId?.trim()));\n const allFilesSaved =\n draftFiles.length === 0 || draftFiles.every((s) => Boolean(s.fileId?.trim()));\n if (!allImagesSaved || !allAudiosSaved || !allFilesSaved) {\n return false;\n }\n if (draftImg.length === 0 && draftAud.length === 0 && draftFiles.length === 0) {\n return textOk;\n }\n return textOk || draftImg.length > 0 || draftAud.length > 0 || draftFiles.length > 0;\n });\n\n /** Assists listed in the page header dropdown. */\n protected assistPickerRows: AXMAiAssistPickerRow[] = [];\n\n /** Agents listed for direct specialist chat (same row shape as assists). */\n protected agentPickerRows: AXMAiAssistPickerRow[] = [];\n\n private static readonly maxChatImageBytes = 20 * 1024 * 1024;\n\n private static readonly maxChatImagesPerTurn = 20;\n\n private static readonly maxChatAudioBytes = 25 * 1024 * 1024;\n\n private static readonly maxChatAudioPerTurn = 5;\n\n /** Windows / some browsers omit `type` or use octet-stream; rely on extension when needed. */\n private static readonly chatImageNameExtPattern = /\\.(png|jpe?g|gif|webp|bmp|svg|ico|heic|heif)$/i;\n\n private static readonly chatAudioNameExtPattern = /\\.(mp3|m4a|aac|wav|webm|ogg|opus|flac)$/i;\n\n /**\n * Returns true for normal image/* types and for empty/octet-stream when the file name looks like an image.\n */\n private static isLikelyChatImageFile(file: File): boolean {\n const t = file.type?.trim() ?? '';\n if (t.startsWith('image/')) {\n return true;\n }\n if (t === 'application/octet-stream' || t === '') {\n return AXMAiChatPageComponent.chatImageNameExtPattern.test(file.name);\n }\n return false;\n }\n\n private static isLikelyChatAudioFile(file: File): boolean {\n const t = file.type?.trim() ?? '';\n if (t.startsWith('audio/')) {\n return true;\n }\n if (t === 'application/octet-stream' || t === '') {\n return AXMAiChatPageComponent.chatAudioNameExtPattern.test(file.name);\n }\n return false;\n }\n\n /** MIME for storage/API when the browser omits or misreports `file.type`. */\n private static mimeTypeForChatAttachment(file: File): string {\n const t = file.type?.trim() ?? '';\n if (t.startsWith('image/')) {\n return t;\n }\n const m = /\\.([^.]+)$/i.exec(file.name);\n const ext = (m?.[1] ?? '').toLowerCase();\n const byExt: Record<string, string> = {\n png: 'image/png',\n jpg: 'image/jpeg',\n jpeg: 'image/jpeg',\n gif: 'image/gif',\n webp: 'image/webp',\n bmp: 'image/bmp',\n svg: 'image/svg+xml',\n ico: 'image/x-icon',\n heic: 'image/heic',\n heif: 'image/heif',\n };\n return byExt[ext] ?? 'image/jpeg';\n }\n\n //#endregion\n\n //#region ---- Page title & header actions ----\n\n override async getPageTitle(): Promise<string> {\n return this.translateService.translateAsync('@ai-management:chat.title');\n }\n\n override async getPrimaryMenuItems(): Promise<AXPActionMenuItem[]> {\n const assists = this.assistPickerRows;\n const agents = this.agentPickerRows;\n if (assists.length === 0 && agents.length === 0) {\n return [];\n }\n\n const assistPx = await this.translateService.translateAsync('@ai-management:chat.picker-assist-prefix');\n const agentPx = await this.translateService.translateAsync('@ai-management:chat.picker-agent-prefix');\n const targetLabel = await this.translateService.translateAsync('@ai-management:chat.chat-target-label');\n\n const currentAgentId = this.selectedDirectAgentId()?.trim();\n const currentAssistId = this.selectedAssistId()?.trim();\n let currentTitle: string;\n if (currentAgentId) {\n currentTitle = `${agentPx} ${this.agentPickerRows.find((r) => r.id === currentAgentId)?.title ?? currentAgentId}`;\n } else if (currentAssistId) {\n currentTitle = `${assistPx} ${this.assistPickerRows.find((r) => r.id === currentAssistId)?.title ?? currentAssistId}`;\n } else {\n currentTitle = await this.translateService.translateAsync('@ai-management:chat.select-assist');\n }\n\n const assistItems: AXPActionMenuItem[] = assists.map((r) => ({\n name: `assist-${r.id}`,\n title: `${assistPx} ${r.title}`,\n icon: 'fa-user-robot',\n command: {\n name: 'ai-chat-select-assist',\n options: { assistId: r.id },\n metadata: { isSelected: !currentAgentId && r.id === currentAssistId },\n },\n }));\n\n const agentItems: AXPActionMenuItem[] = agents.map((r) => ({\n name: `agent-${r.id}`,\n title: `${agentPx} ${r.title}`,\n icon: 'fa-people-group',\n command: {\n name: 'ai-chat-select-agent',\n options: { agentId: r.id },\n metadata: { isSelected: r.id === currentAgentId },\n },\n }));\n\n return [\n {\n name: 'ai-chat-target-picker',\n title: `${targetLabel}: ${currentTitle}`,\n icon: 'fa-comments',\n items: [...assistItems, ...agentItems],\n },\n ];\n }\n\n override async execute(command: AXPExecuteCommand): Promise<void> {\n if (command.name === 'ai-chat-select-assist') {\n const raw = command.options?.['assistId'];\n const id = typeof raw === 'string' ? raw.trim() : '';\n if (id) {\n await this.onAssistPicked(id);\n }\n return;\n }\n if (command.name === 'ai-chat-select-agent') {\n const raw = command.options?.['agentId'];\n const id = typeof raw === 'string' ? raw.trim() : '';\n if (id) {\n await this.onAgentPicked(id);\n }\n return;\n }\n await super.execute(command);\n }\n\n //#endregion\n\n //#region ---- Lifecycle ----\n\n constructor() {\n super();\n this.updateLayoutDirection();\n this.translateService.langChanges$.subscribe(() => {\n this.updateLayoutDirection();\n });\n }\n\n override async ngOnInit(): Promise<void> {\n await super.ngOnInit();\n await this.loadAssistPickerRowsFromManager();\n await this.loadAgentPickerRowsFromManager();\n\n const qp = this.route.snapshot.queryParamMap;\n const agentFromQuery = qp.get('agentId')?.trim();\n const assistFromQuery = (qp.get('assistId') ?? qp.get('assist'))?.trim();\n\n if (agentFromQuery && this.agentPickerRows.some((r) => r.id === agentFromQuery)) {\n this.selectedDirectAgentId.set(agentFromQuery);\n this.selectedAssistId.set(undefined);\n } else if (assistFromQuery && this.assistPickerRows.some((r) => r.id === assistFromQuery)) {\n this.selectedAssistId.set(assistFromQuery);\n this.selectedDirectAgentId.set(undefined);\n } else {\n this.selectedDirectAgentId.set(undefined);\n if (assistFromQuery || agentFromQuery) {\n this.selectedAssistId.set(undefined);\n }\n if (!this.selectedAssistId()?.trim() && !this.selectedDirectAgentId()?.trim()) {\n const fallback = await this.aiManager.getAssistForChat(undefined);\n this.selectedAssistId.set(fallback.id);\n }\n }\n\n await this.loadEffectiveAssistForChat();\n this.seedInitialMessagesFromEffectiveAssist();\n await this.loadModels();\n this.recompute();\n }\n\n //#endregion\n\n //#region ---- UI Handlers ----\n\n /**\n * Parses assistant text: &lt;redacted_thinking&gt; for collapsible UI, remaining body for the main reply.\n */\n parseAssistantMessageForDisplay(raw: string | null | undefined): AssistantParsedContent {\n return parseAssistantContentForDisplay(raw);\n }\n\n protected parseAssistantMessageForDisplayFromMessage(message: AXPAiChatMessage): AssistantParsedContent {\n return axmParseAssistantMessageForDisplayFromMessage(message);\n }\n\n /**\n * True when the tool name is a supervisor delegated agent (`agent:<catalogId>`).\n */\n protected isDelegatedAgentToolCall(toolName: string): boolean {\n return axpAiParseSupervisorAgentToolName(toolName) != null;\n }\n\n /**\n * Mini-chat UI for delegated agents applies only in assist (supervisor) mode.\n */\n protected showDelegatedAgentMiniChat(toolName: string): boolean {\n return this.isDelegatedAgentToolCall(toolName) && this.threadUsesAssistLayout();\n }\n\n /**\n * Parses JSON tool-result bodies returned by delegated agent execution (`data.agentName`, `answer`).\n */\n protected parseDelegatedAgentToolResult(content: string): AXMAiDelegatedAgentToolParsed {\n const trimmed = content?.trim() ?? '';\n if (!trimmed) {\n return {};\n }\n try {\n const o = JSON.parse(trimmed) as Record<string, unknown>;\n if (typeof o['success'] === 'boolean' && o['success'] === false) {\n const errRaw = o['error'];\n const err =\n typeof errRaw === 'string' && errRaw.trim()\n ? errRaw.trim()\n : 'Request failed.';\n return { error: err };\n }\n if (o['success'] !== true || !o['data'] || typeof o['data'] !== 'object' || Array.isArray(o['data'])) {\n return {};\n }\n const d = o['data'] as Record<string, unknown>;\n const agentName =\n typeof d['agentName'] === 'string' && d['agentName'].trim() ? d['agentName'].trim() : undefined;\n const answerRaw = typeof d['answer'] === 'string' ? d['answer'] : undefined;\n const answer = answerRaw?.trim() ? answerRaw : undefined;\n return {\n ...(agentName ? { agentName } : {}),\n ...(answer ? { answer } : {}),\n };\n } catch {\n return {};\n }\n }\n\n /**\n * Human-readable specialist prompt from delegated-agent tool arguments (for mini-chat UI).\n */\n protected getAgentDelegatedPromptPreview(argumentsValue: unknown): string {\n const obj = this.normalizeDelegatedAgentToolArgs(argumentsValue);\n if (!obj) {\n return this.formatToolArguments(argumentsValue);\n }\n const preferKeys = ['query', 'task', 'prompt', 'message', 'userMessage', 'instruction', 'goal'] as const;\n for (const k of preferKeys) {\n const v = obj[k];\n if (typeof v === 'string' && v.trim()) {\n return v.trim();\n }\n }\n const keys = Object.keys(obj);\n if (keys.length === 1) {\n const only = obj[keys[0]!];\n if (typeof only === 'string' && only.trim()) {\n return only.trim();\n }\n }\n try {\n return JSON.stringify(obj, null, 2);\n } catch {\n return this.formatToolArguments(argumentsValue);\n }\n }\n\n private normalizeDelegatedAgentToolArgs(argumentsValue: unknown): Record<string, unknown> | null {\n if (argumentsValue == null) {\n return null;\n }\n if (typeof argumentsValue === 'object' && !Array.isArray(argumentsValue)) {\n return { ...(argumentsValue as Record<string, unknown>) };\n }\n if (typeof argumentsValue === 'string') {\n const t = argumentsValue.trim();\n if (!t) {\n return null;\n }\n try {\n const p = JSON.parse(t) as unknown;\n if (p != null && typeof p === 'object' && !Array.isArray(p)) {\n return p as Record<string, unknown>;\n }\n } catch {\n return null;\n }\n }\n return null;\n }\n\n /**\n * Plain `text` payload for templates (user / assistant transcripts).\n */\n protected chatMessageText(message: AXPAiChatMessage): string {\n return axpAiChatMessageGetText(message);\n }\n\n /**\n * User bubble uses the muted “attachment” style when every segment is image and/or audio (no text).\n */\n protected userMessageAttachmentOnlyBubble(message: AXPAiChatMessage): boolean {\n return (\n message.role === 'user' &&\n message.responses.length > 0 &&\n message.responses.every(\n (r: AXPAiChatResponse) => r.type === 'image' || r.type === 'audio' || r.type === 'file',\n )\n );\n }\n\n /**\n * Concatenates preamble assistant text lines for a tool-turn header block.\n */\n protected toolTurnPreamblePlain(item: AXMAiChatToolTurnItem): string {\n return item.preambleMessages.map((m) => axpAiChatMessageGetText(m)).join('\\n').trim();\n }\n\n protected toolTurnPreambleParsed(item: AXMAiChatToolTurnItem): AssistantParsedContent {\n const thinkParts: string[] = [];\n const bodyParts: string[] = [];\n for (const m of item.preambleMessages) {\n const parsed = this.parseAssistantMessageForDisplayFromMessage(m);\n if (parsed.thinking?.trim()) {\n thinkParts.push(parsed.thinking.trim());\n }\n if (parsed.body.trim()) {\n bodyParts.push(parsed.body.trim());\n }\n }\n return {\n thinking: thinkParts.length > 0 ? thinkParts.join('\\n\\n') : null,\n body: bodyParts.join('\\n\\n'),\n };\n }\n\n /**\n * When the layout-JSON agent renders preamble messages as widgets, suppress the duplicated JSON body block.\n */\n protected toolTurnPreambleAggregatedBodyVisible(item: AXMAiChatToolTurnItem): boolean {\n if (!this.threadUsesLayoutJsonAgent()) {\n return true;\n }\n return !item.preambleMessages.some((m) => this.assistantLayoutJsonWidgetNode(m) != null);\n }\n\n /**\n * Layout node for assistant `node` responses when the payload matches {@link AXPWidgetNode}.\n */\n protected asAssistantLayoutNode(message: AXPAiChatMessage): AXPWidgetNode | null {\n if (message.role !== 'assistant') {\n return null;\n }\n const nodeSeg = message.responses.find((r: AXPAiChatResponse) => r.type === 'node');\n if (!nodeSeg || nodeSeg.type !== 'node') {\n return null;\n }\n const c = nodeSeg.content;\n if (\n c != null &&\n typeof c === 'object' &&\n !Array.isArray(c) &&\n typeof (c as Record<string, unknown>)['type'] === 'string'\n ) {\n return c as AXPWidgetNode;\n }\n return null;\n }\n\n /**\n * Widget root for the layout-JSON specialist agent: prefers a `node` response, otherwise parses\n * concatenated `text` segments as JSON (optional ``` / ```json fence).\n * Results are cached by message payload so the same {@link AXPWidgetNode} reference is reused across CD cycles.\n */\n protected assistantLayoutJsonWidgetNode(message: AXPAiChatMessage): AXPWidgetNode | null {\n if (!this.threadUsesLayoutJsonAgent() || message.role !== 'assistant') {\n return null;\n }\n const fp = this.layoutJsonMessageResponsesFingerprint(message);\n const hit = this.layoutJsonParsedWidgetCache.get(fp);\n if (hit !== undefined) {\n return hit;\n }\n const computed = this.computeAssistantLayoutJsonWidgetNode(message);\n this.layoutJsonParsedWidgetCache.set(fp, computed);\n this.trimLayoutJsonParsedWidgetCache();\n return computed;\n }\n\n private layoutJsonMessageResponsesFingerprint(message: AXPAiChatMessage): string {\n try {\n return JSON.stringify(message.responses);\n } catch {\n return '';\n }\n }\n\n private computeAssistantLayoutJsonWidgetNode(message: AXPAiChatMessage): AXPWidgetNode | null {\n const fromNode = this.asAssistantLayoutNode(message);\n if (fromNode) {\n return fromNode;\n }\n const textParts: string[] = [];\n for (const seg of message.responses) {\n if (seg.type === 'text' && typeof seg.content === 'string' && seg.content.trim()) {\n textParts.push(seg.content.trim());\n }\n }\n const blob = textParts.join('\\n\\n').trim();\n if (!blob) {\n return null;\n }\n for (const candidate of this.collectAssistantLayoutJsonCandidates(blob)) {\n const parsed = this.tryParseAssistantWidgetRootJson(candidate);\n if (parsed) {\n return parsed;\n }\n }\n return null;\n }\n\n private trimLayoutJsonParsedWidgetCache(): void {\n const max = 200;\n while (this.layoutJsonParsedWidgetCache.size > max) {\n const first = this.layoutJsonParsedWidgetCache.keys().next().value;\n if (first === undefined) {\n break;\n }\n this.layoutJsonParsedWidgetCache.delete(first);\n }\n }\n\n /** Render mode for {@link assistantLayoutJsonWidgetNode}; defaults to `edit`. */\n protected assistantLayoutJsonWidgetMode(message: AXPAiChatMessage): AXPWidgetRenderMode {\n const n = this.assistantLayoutJsonWidgetNode(message);\n const m = n?.mode;\n if (m === 'view' || m === 'edit' || m === 'print' || m === 'column' || m === 'filter' || m === 'designer') {\n return m;\n }\n return 'edit';\n }\n\n private stripAssistantJsonLayoutFence(raw: string): string {\n const trimmed = raw.trim();\n const fence = /^```(?:json)?\\s*\\r?\\n?([\\s\\S]*?)\\r?\\n?```\\s*$/i.exec(trimmed);\n return fence ? fence[1].trim() : trimmed;\n }\n\n /**\n * Builds parse attempts for assistant widget JSON: full blob, whole-string fence strip,\n * and each ``` / ```json fenced segment (handles prose + fenced JSON in one message).\n */\n private collectAssistantLayoutJsonCandidates(blob: string): string[] {\n const out: string[] = [];\n const trimmed = blob.trim();\n if (trimmed) {\n out.push(trimmed);\n out.push(this.stripAssistantJsonLayoutFence(trimmed));\n }\n const fenceRe = /```(?:json)?\\s*\\r?\\n?([\\s\\S]*?)\\r?\\n?```/gi;\n let m: RegExpExecArray | null;\n while ((m = fenceRe.exec(blob)) !== null) {\n const inner = m[1]?.trim();\n if (inner) {\n out.push(inner);\n }\n }\n return [...new Set(out.filter(Boolean))];\n }\n\n /** Parses one candidate string into a root {@link AXPWidgetNode} when shape matches. */\n private tryParseAssistantWidgetRootJson(candidate: string): AXPWidgetNode | null {\n const stripped = candidate.trim();\n if (!stripped) {\n return null;\n }\n try {\n const parsed = JSON.parse(stripped) as unknown;\n if (\n parsed != null &&\n typeof parsed === 'object' &&\n !Array.isArray(parsed) &&\n typeof (parsed as Record<string, unknown>)['type'] === 'string'\n ) {\n return parsed as AXPWidgetNode;\n }\n } catch {\n /* try next candidate */\n }\n return null;\n }\n\n /**\n * Parses `AiManagement:ChatSynthesizeSpeech` tool output for inline audio playback.\n */\n getSynthesizeSpeechPreview(\n pair: AXMAiChatToolCallPair,\n ): { fileId?: string; mimeType: string; title: string } | null {\n if (pair.call.name !== AIMANAGEMENT_CHAT_SYNTHESIZE_SPEECH_COMMAND_KEY) {\n return null;\n }\n const raw = pair.outputContent?.trim();\n if (!raw) {\n return null;\n }\n try {\n const parsed = JSON.parse(raw) as Record<string, unknown>;\n if (parsed['success'] !== true || !parsed['data'] || typeof parsed['data'] !== 'object') {\n return null;\n }\n const data = parsed['data'] as Record<string, unknown>;\n const fileId = typeof data['fileId'] === 'string' ? data['fileId'].trim() : '';\n const text = typeof data['text'] === 'string' ? data['text'].trim() : '';\n const mimeType =\n typeof data['mimeType'] === 'string' && data['mimeType'].trim()\n ? data['mimeType'].trim()\n : 'audio/mpeg';\n const title = text ? (text.length > 80 ? `${text.slice(0, 80)}…` : text) : 'Generated speech';\n if (fileId) {\n return { fileId, mimeType, title };\n }\n return null;\n } catch {\n return null;\n }\n }\n\n /**\n * Parses `AiManagement:ChatGenerateImage` tool output for inline image preview.\n * Prefers persisted `fileId` (resolved via file storage); falls back to legacy `imageUrl`.\n */\n getGenerateImagePreview(\n pair: AXMAiChatToolCallPair,\n ): { fileId?: string; imageUrl?: string; alt: string } | null {\n if (pair.call.name !== AIMANAGEMENT_CHAT_GENERATE_IMAGE_COMMAND_KEY) {\n return null;\n }\n const raw = pair.outputContent?.trim();\n if (!raw) {\n return null;\n }\n try {\n const parsed = JSON.parse(raw) as Record<string, unknown>;\n if (parsed['success'] !== true || !parsed['data'] || typeof parsed['data'] !== 'object') {\n return null;\n }\n const data = parsed['data'] as Record<string, unknown>;\n const fileId = typeof data['fileId'] === 'string' ? data['fileId'].trim() : '';\n const imageUrl = typeof data['imageUrl'] === 'string' ? data['imageUrl'].trim() : '';\n const prompt = typeof data['prompt'] === 'string' ? data['prompt'].trim() : '';\n const alt = prompt || 'Generated image';\n if (fileId) {\n return { fileId, alt };\n }\n if (imageUrl) {\n return { imageUrl, alt };\n }\n return null;\n } catch {\n return null;\n }\n }\n\n /**\n * Pretty-prints tool arguments for the tool I/O panel.\n */\n formatToolArguments(argumentsValue: unknown): string {\n if (argumentsValue === undefined || argumentsValue === null) {\n return '';\n }\n if (typeof argumentsValue === 'string') {\n return this.formatJsonStringIfPossible(argumentsValue);\n }\n try {\n return JSON.stringify(argumentsValue, null, 2);\n } catch {\n return String(argumentsValue);\n }\n }\n\n /**\n * Pretty-prints tool result JSON when valid; otherwise returns raw text.\n */\n formatToolResultBody(content: string): string {\n return this.formatJsonStringIfPossible(content);\n }\n\n /**\n * Short label for a standalone tool message (e.g. grouping failed).\n */\n formatToolMessageSummary(message: AXPAiChatMessage): string {\n const tr = message.responses.find(\n (r: AXPAiChatResponse) => r.type === 'tool_result' || r.type === 'agent_result',\n );\n if (message.role !== 'tool' || !tr) {\n return message.name?.trim() || message.role;\n }\n const label = message.name?.trim() || 'tool';\n const raw = axpAiChatToolOrAgentResultBodyJson(message);\n if (!raw) {\n return label;\n }\n try {\n const parsed = JSON.parse(raw) as { success?: boolean };\n if (typeof parsed.success === 'boolean') {\n return parsed.success ? `${label} · ok` : `${label} · failed`;\n }\n } catch {\n // Not JSON — show compact raw fragment\n }\n return raw.length > 100 ? `${label} · ${raw.slice(0, 100)}…` : `${label} · ${raw}`;\n }\n\n private formatJsonStringIfPossible(raw: string): string {\n const trimmed = raw.trim();\n if (!trimmed) {\n return '';\n }\n try {\n const parsed = JSON.parse(trimmed) as unknown;\n return JSON.stringify(parsed, null, 2);\n } catch {\n return raw;\n }\n }\n\n /**\n * Unique `callId`s from `agent_result` lines in the transcript (supervisor delegates).\n */\n private collectAgentResultCallIds(messages: AXPAiChatMessage[]): string[] {\n const ids: string[] = [];\n for (const m of messages) {\n if (m.role !== 'tool') {\n continue;\n }\n const ar = m.responses.find((x: AXPAiChatResponse) => x.type === 'agent_result');\n if (ar && ar.type === 'agent_result' && ar.callId.trim()) {\n ids.push(ar.callId.trim());\n }\n }\n return [...new Set(ids)];\n }\n\n /**\n * Resolves display name for a delegate from the slim `agent_result` row when the in-memory store has no title.\n */\n private resolveAgentDisplayNameFromTranscript(\n messages: AXPAiChatMessage[],\n callId: string,\n ): string | null {\n const id = callId.trim();\n if (!id) {\n return null;\n }\n for (const m of messages) {\n if (m.role !== 'tool') {\n continue;\n }\n const ar = m.responses.find((x: AXPAiChatResponse) => x.type === 'agent_result');\n if (!ar || ar.type !== 'agent_result' || ar.callId.trim() !== id) {\n continue;\n }\n const name = ar.content.data?.agentName?.trim();\n return name || null;\n }\n return null;\n }\n\n private updateLayoutDirection(): void {\n const language = this.translateService.getActiveLang();\n this.layoutDirection.set(language?.startsWith('fa') || language?.startsWith('ar') ? 'rtl' : 'ltr');\n }\n\n onComposerValueChanged(e: AXValueChangedEvent): void {\n if (!e.isUserInteraction) {\n return;\n }\n this.input.set(String(e.value ?? ''));\n }\n\n /**\n * Opens the system file picker via {@link AXFileService.choose} (same as file-uploader “upload from computer”).\n */\n openChatImagePicker(): void {\n void this.pickComposerChatImages();\n }\n\n openChatAudioPicker(): void {\n void this.pickComposerChatAudios();\n }\n\n openChatDocumentPicker(): void {\n void this.pickComposerChatDocuments();\n }\n\n /**\n * Resolves picked files then stages previews and persists via {@link AXPFileStorageService} (like platform file-uploader → storage).\n */\n private async pickComposerChatImages(): Promise<void> {\n if (!isPlatformBrowser(this.platformId)) {\n this.logChatComposerImage('choose-skip', { reason: 'not-browser' });\n return;\n }\n if (this.isBusy() || this.isComposerSaving()) {\n this.logChatComposerImage('choose-skip', {\n reason: 'busy',\n isBusy: this.isBusy(),\n isComposerSaving: this.isComposerSaving(),\n });\n return;\n }\n this.logChatComposerImage('choose-start');\n try {\n const files = await this.fileService.choose({\n multiple: true,\n accept: 'image/*',\n });\n this.logChatComposerImage('choose-result', {\n count: files.length,\n files: files.map((f) => ({\n name: f.name,\n type: f.type || '(empty)',\n size: f.size,\n })),\n });\n if (files.length === 0) {\n return;\n }\n await this.processComposerChatImageFiles(files);\n } catch (e) {\n const msg = e instanceof Error ? e.message : String(e);\n this.logChatComposerImage('choose-error', { error: msg });\n }\n }\n\n /**\n * Debug logging for composer image flow. Filter DevTools console by: AI Chat composer image\n */\n private logChatComposerImage(event: string, data?: Record<string, unknown>): void {\n if (!isPlatformBrowser(this.platformId)) {\n return;\n }\n if (data && Object.keys(data).length > 0) {\n console.log(`[AI Chat composer image] ${event}`, data);\n } else {\n console.log(`[AI Chat composer image] ${event}`);\n }\n }\n\n /**\n * Shows a non-blocking warning toast for composer upload validation (translations load asynchronously).\n */\n private showComposerUploadWarning(translationKey: string): void {\n void (async (): Promise<void> => {\n const errTitle = await this.translateService.translateAsync('@general:messages.error.title');\n const content = await this.translateService.translateAsync(translationKey);\n await this.toastService.show({ color: 'warning', title: errTitle, content });\n })();\n }\n\n /**\n * Stages images above the composer: instant `URL` previews, then persists to file storage.\n * Images are appended to the thread on send only.\n */\n private async processComposerChatImageFiles(files: File[]): Promise<void> {\n if (!isPlatformBrowser(this.platformId)) {\n return;\n }\n let groupId = this.draftAttachmentGroupId();\n if (!groupId?.trim()) {\n groupId = globalThis.crypto.randomUUID();\n this.draftAttachmentGroupId.set(groupId);\n }\n const gid = groupId.trim();\n\n const existing = this.draftComposerImages().length;\n if (existing + files.length > AXMAiChatPageComponent.maxChatImagesPerTurn) {\n this.logChatComposerImage('validation-fail', { reason: 'too-many', existing, adding: files.length });\n this.showComposerUploadWarning('@ai-management:chat.upload-too-many');\n return;\n }\n\n const newSlots: AXMAiComposerDraftImage[] = [];\n const filesForPersist: File[] = [];\n\n for (const file of files) {\n if (!AXMAiChatPageComponent.isLikelyChatImageFile(file)) {\n this.logChatComposerImage('validation-fail', {\n reason: 'invalid-type',\n name: file.name,\n type: file.type || '(empty)',\n });\n this.showComposerUploadWarning('@ai-management:chat.upload-invalid-type');\n return;\n }\n if (file.size > AXMAiChatPageComponent.maxChatImageBytes) {\n this.logChatComposerImage('validation-fail', {\n reason: 'too-large',\n name: file.name,\n size: file.size,\n max: AXMAiChatPageComponent.maxChatImageBytes,\n });\n this.showComposerUploadWarning('@ai-management:chat.upload-too-large');\n return;\n }\n const mimeType = AXMAiChatPageComponent.mimeTypeForChatAttachment(file);\n const fileForStorage =\n file.type.trim().startsWith('image/') && file.type.trim().length > 0\n ? file\n : new File([file], file.name, { type: mimeType });\n newSlots.push({\n clientId: globalThis.crypto.randomUUID(),\n previewUrl: URL.createObjectURL(file),\n mimeType,\n name: file.name,\n });\n filesForPersist.push(fileForStorage);\n }\n\n this.draftComposerImages.update((prev) => [...prev, ...newSlots]);\n this.logChatComposerImage('draft-staged', {\n newSlots: newSlots.length,\n totalDraft: this.draftComposerImages().length,\n attachmentRefId: gid,\n });\n\n this.isComposerSaving.set(true);\n this.logChatComposerImage('persist-start', { files: filesForPersist.length });\n try {\n for (let i = 0; i < filesForPersist.length; i++) {\n const file = filesForPersist[i];\n const clientId = newSlots[i].clientId;\n try {\n const { fileId } = await persistAiChatAttachmentImage(this.fileStorage, file, gid);\n this.logChatComposerImage('persist-file-ok', {\n index: i,\n clientId,\n fileId: fileId?.slice(0, 8) + '…',\n name: file.name,\n });\n this.draftComposerImages.update((prev) =>\n prev.map((s) => (s.clientId === clientId ? { ...s, fileId } : s)),\n );\n } catch (e) {\n const msg = e instanceof Error ? e.message : String(e);\n this.logChatComposerImage('persist-file-error', {\n index: i,\n clientId,\n name: file.name,\n error: msg,\n });\n this.draftComposerImages.update((prev) => {\n const slot = prev.find((s) => s.clientId === clientId);\n if (slot) {\n URL.revokeObjectURL(slot.previewUrl);\n }\n return prev.filter((s) => s.clientId !== clientId);\n });\n if (\n this.draftComposerImages().length === 0 &&\n this.draftComposerAudios().length === 0 &&\n this.draftComposerFiles().length === 0\n ) {\n this.draftAttachmentGroupId.set(null);\n }\n const errTitle = await this.translateService.translateAsync('@general:messages.error.title');\n const uploadFailed = await this.translateService.translateAsync('@ai-management:chat.upload-error');\n await this.toastService.show({\n color: 'danger',\n title: errTitle,\n content: `${uploadFailed} ${msg}`,\n });\n return;\n }\n }\n this.logChatComposerImage('persist-all-done');\n } finally {\n this.isComposerSaving.set(false);\n this.logChatComposerImage('persist-finally', {\n isComposerSaving: false,\n draftCount: this.draftComposerImages().length,\n });\n }\n }\n\n private async pickComposerChatAudios(): Promise<void> {\n if (!isPlatformBrowser(this.platformId)) {\n return;\n }\n if (this.isBusy() || this.isComposerSaving()) {\n return;\n }\n try {\n const files = await this.fileService.choose({\n multiple: true,\n accept: 'audio/*',\n });\n if (files.length === 0) {\n return;\n }\n await this.processComposerChatAudioFiles(files);\n } catch {\n /* user cancelled or picker error */\n }\n }\n\n private async processComposerChatAudioFiles(files: File[]): Promise<void> {\n if (!isPlatformBrowser(this.platformId)) {\n return;\n }\n let groupId = this.draftAttachmentGroupId();\n if (!groupId?.trim()) {\n groupId = globalThis.crypto.randomUUID();\n this.draftAttachmentGroupId.set(groupId);\n }\n const gid = groupId.trim();\n\n const existing = this.draftComposerAudios().length;\n if (existing + files.length > AXMAiChatPageComponent.maxChatAudioPerTurn) {\n this.showComposerUploadWarning('@ai-management:chat.upload-audio-too-many');\n return;\n }\n\n const newSlots: AXMAiComposerDraftAudio[] = [];\n const filesForPersist: File[] = [];\n\n for (const file of files) {\n if (!AXMAiChatPageComponent.isLikelyChatAudioFile(file)) {\n this.showComposerUploadWarning('@ai-management:chat.upload-audio-invalid-type');\n return;\n }\n if (file.size > AXMAiChatPageComponent.maxChatAudioBytes) {\n this.showComposerUploadWarning('@ai-management:chat.upload-audio-too-large');\n return;\n }\n const mimeType = AXMAiChatPageComponent.mimeTypeForChatAttachment(file);\n const fileForStorage =\n file.type.trim().startsWith('audio/') && file.type.trim().length > 0\n ? file\n : new File([file], file.name, { type: mimeType });\n newSlots.push({\n clientId: globalThis.crypto.randomUUID(),\n mimeType,\n name: file.name,\n });\n filesForPersist.push(fileForStorage);\n }\n\n this.draftComposerAudios.update((prev) => [...prev, ...newSlots]);\n\n this.isComposerSaving.set(true);\n try {\n for (let i = 0; i < filesForPersist.length; i++) {\n const file = filesForPersist[i];\n const clientId = newSlots[i].clientId;\n try {\n const { fileId } = await persistAiChatAttachmentImage(this.fileStorage, file, gid);\n this.draftComposerAudios.update((prev) =>\n prev.map((s) => (s.clientId === clientId ? { ...s, fileId } : s)),\n );\n } catch (e) {\n const msg = e instanceof Error ? e.message : String(e);\n this.draftComposerAudios.update((prev) => prev.filter((s) => s.clientId !== clientId));\n if (\n this.draftComposerAudios().length === 0 &&\n this.draftComposerImages().length === 0 &&\n this.draftComposerFiles().length === 0\n ) {\n this.draftAttachmentGroupId.set(null);\n }\n const errTitle = await this.translateService.translateAsync('@general:messages.error.title');\n const uploadFailed = await this.translateService.translateAsync('@ai-management:chat.upload-audio-error');\n await this.toastService.show({\n color: 'danger',\n title: errTitle,\n content: `${uploadFailed} ${msg}`,\n });\n return;\n }\n }\n } finally {\n this.isComposerSaving.set(false);\n }\n }\n\n private async pickComposerChatDocuments(): Promise<void> {\n if (!isPlatformBrowser(this.platformId)) {\n return;\n }\n if (this.isBusy() || this.isComposerSaving()) {\n return;\n }\n try {\n const files = await this.fileService.choose({\n multiple: true,\n accept:\n '.pdf,.txt,.md,.csv,.tsv,.json,.jsonl,.xml,.html,.htm,.yaml,.yml,.log,.rtf,.doc,.docx,.xls,.xlsx,.ppt,.pptx,.odt,.ods,.odp,application/pdf,text/*,application/json',\n });\n if (files.length === 0) {\n return;\n }\n await this.processComposerChatDocumentFiles(files);\n } catch {\n /* user cancelled */\n }\n }\n\n private async processComposerChatDocumentFiles(files: File[]): Promise<void> {\n if (!isPlatformBrowser(this.platformId)) {\n return;\n }\n let groupId = this.draftAttachmentGroupId();\n if (!groupId?.trim()) {\n groupId = globalThis.crypto.randomUUID();\n this.draftAttachmentGroupId.set(groupId);\n }\n const gid = groupId.trim();\n\n const existing = this.draftComposerFiles().length;\n if (existing + files.length > AXM_AI_CHAT_COMPOSER_MAX_DOCUMENTS_PER_TURN) {\n this.showComposerUploadWarning('@ai-management:chat.upload-documents-too-many');\n return;\n }\n\n const newSlots: AXMAiComposerDraftFile[] = [];\n const filesForPersist: File[] = [];\n\n for (const file of files) {\n if (!axmIsLikelyChatDocumentFile(file)) {\n this.showComposerUploadWarning('@ai-management:chat.upload-documents-invalid-type');\n return;\n }\n if (file.size > AXM_AI_CHAT_COMPOSER_MAX_DOCUMENT_BYTES) {\n this.showComposerUploadWarning('@ai-management:chat.upload-documents-too-large');\n return;\n }\n const mimeType = axmMimeTypeForChatAttachment(file);\n const fileForStorage =\n file.type.trim().length > 0 && file.type.trim() !== 'application/octet-stream'\n ? file\n : new File([file], file.name, { type: mimeType });\n newSlots.push({\n clientId: globalThis.crypto.randomUUID(),\n mimeType,\n name: file.name,\n });\n filesForPersist.push(fileForStorage);\n }\n\n this.draftComposerFiles.update((prev) => [...prev, ...newSlots]);\n\n this.isComposerSaving.set(true);\n try {\n for (let i = 0; i < filesForPersist.length; i++) {\n const file = filesForPersist[i];\n const clientId = newSlots[i].clientId;\n try {\n const { fileId } = await persistAiChatAttachmentImage(this.fileStorage, file, gid);\n this.draftComposerFiles.update((prev) =>\n prev.map((s) => (s.clientId === clientId ? { ...s, fileId } : s)),\n );\n } catch (e) {\n const msg = e instanceof Error ? e.message : String(e);\n this.draftComposerFiles.update((prev) => prev.filter((s) => s.clientId !== clientId));\n if (\n this.draftComposerFiles().length === 0 &&\n this.draftComposerImages().length === 0 &&\n this.draftComposerAudios().length === 0\n ) {\n this.draftAttachmentGroupId.set(null);\n }\n const errTitle = await this.translateService.translateAsync('@general:messages.error.title');\n const uploadFailed = await this.translateService.translateAsync('@ai-management:chat.upload-documents-error');\n await this.toastService.show({\n color: 'danger',\n title: errTitle,\n content: `${uploadFailed} ${msg}`,\n });\n return;\n }\n }\n } finally {\n this.isComposerSaving.set(false);\n }\n }\n\n /**\n * Removes one staged image from the composer and revokes its object URL.\n */\n removeDraftImage(clientId: string): void {\n const id = clientId.trim();\n if (!id) {\n return;\n }\n this.draftComposerImages.update((prev) => {\n const slot = prev.find((s) => s.clientId === id);\n if (slot) {\n URL.revokeObjectURL(slot.previewUrl);\n }\n const next = prev.filter((s) => s.clientId !== id);\n if (\n next.length === 0 &&\n this.draftComposerAudios().length === 0 &&\n this.draftComposerFiles().length === 0\n ) {\n this.draftAttachmentGroupId.set(null);\n }\n return next;\n });\n }\n\n removeDraftAudio(clientId: string): void {\n const id = clientId.trim();\n if (!id) {\n return;\n }\n this.draftComposerAudios.update((prev) => {\n const next = prev.filter((s) => s.clientId !== id);\n if (\n next.length === 0 &&\n this.draftComposerImages().length === 0 &&\n this.draftComposerFiles().length === 0\n ) {\n this.draftAttachmentGroupId.set(null);\n }\n return next;\n });\n }\n\n removeDraftFile(clientId: string): void {\n const id = clientId.trim();\n if (!id) {\n return;\n }\n this.draftComposerFiles.update((prev) => {\n const next = prev.filter((s) => s.clientId !== id);\n if (\n next.length === 0 &&\n this.draftComposerImages().length === 0 &&\n this.draftComposerAudios().length === 0\n ) {\n this.draftAttachmentGroupId.set(null);\n }\n return next;\n });\n }\n\n /**\n * Revokes blob URLs and clears composer draft state (assist switch, etc.).\n */\n private clearComposerDraftState(): void {\n for (const s of this.draftComposerImages()) {\n URL.revokeObjectURL(s.previewUrl);\n }\n this.draftComposerImages.set([]);\n this.draftComposerAudios.set([]);\n this.draftComposerFiles.set([]);\n this.draftAttachmentGroupId.set(null);\n this.isComposerSaving.set(false);\n }\n\n /**\n * Opens a read-only JSON viewer with the full transcript ({@link messages}) for debugging.\n */\n async openMessagesLogDialog(): Promise<void> {\n const dialogTitle = await this.translateService.translateAsync(\n '@ai-management:chat.messages-log-dialog-title',\n );\n const mainTranscriptLabel = await this.translateService.translateAsync(\n '@ai-management:chat.messages-log-main-transcript',\n );\n const delegatedMissing = await this.translateService.translateAsync(\n '@ai-management:chat.messages-log-delegated-missing',\n );\n\n const transcript = this.fullTranscriptMessages();\n const displayTranscript = this.cloneMessagesForJsonViewer(transcript);\n\n const callIds = this.collectAgentResultCallIds(transcript);\n const delegatedRuns: { agentTitle: string; messages: unknown }[] = [];\n for (const callId of callIds) {\n const entry = this.delegatedTranscriptsByCallId()[callId];\n const name =\n entry?.agentName?.trim() ||\n this.resolveAgentDisplayNameFromTranscript(transcript, callId) ||\n callId;\n delegatedRuns.push({\n agentTitle: name,\n messages: entry\n ? this.cloneMessagesForJsonViewer(entry.messages)\n : { note: delegatedMissing },\n });\n }\n\n const dialogRef = await this.layoutBuilder\n .create()\n .dialog((dialog) => {\n dialog\n .setTitle(dialogTitle)\n .setSize('lg')\n .setCloseButton(true)\n .setContext({\n value: {\n transcript: displayTranscript,\n delegatedRuns,\n },\n })\n .content((layoutBuilder) => {\n layoutBuilder.flex((flex) => {\n flex.mode('view').setOptions({\n flexDirection: 'column',\n gap: '12px',\n maxHeight: '75vh',\n overflowY: 'auto',\n });\n flex.formField(mainTranscriptLabel, (field) => {\n // Form-field `customWidget` does not accept a widget delegate; set path on the field so the child binds to context.\n field.path('value.transcript');\n field.customWidget('json-viewer');\n });\n delegatedRuns.forEach((run, i) => {\n flex.formField(run.agentTitle, (field) => {\n field.path(`value.delegatedRuns.${i}.messages`);\n field.customWidget('json-viewer');\n });\n });\n });\n })\n .setActions((actions) => {\n actions.cancel('@general:actions.close.title');\n });\n })\n .show();\n\n if (dialogRef.action() === 'cancel') {\n dialogRef.close();\n }\n }\n\n /**\n * Opens a read-only view of the specialist sub-run transcript for one delegated agent tool call\n * (same in-memory cache as Logs / JSON export).\n */\n protected async openDelegatedAgentTranscriptDialog(\n callIdRaw: string,\n toolName: string,\n resolvedAgentLabel?: string,\n ): Promise<void> {\n const callId = callIdRaw?.trim() ?? '';\n if (!callId) {\n return;\n }\n const entry = this.delegatedTranscriptsByCallId()[callId];\n const catalogId = axpAiParseSupervisorAgentToolName(toolName);\n const catalogTitle =\n catalogId != null\n ? this.agentPickerRows.find((r) => r.id === catalogId)?.title?.trim()\n : undefined;\n const titleBase =\n resolvedAgentLabel?.trim() || entry?.agentName?.trim() || catalogTitle || toolName;\n const suffix = await this.translateService.translateAsync(\n '@ai-management:chat.delegated-agent-transcript-suffix',\n );\n const missing = await this.translateService.translateAsync(\n '@ai-management:chat.messages-log-delegated-missing',\n );\n const comp = (await import('./ai-delegated-agent-transcript-popup.component'))\n .AXMAiDelegatedAgentTranscriptPopupComponent;\n await this.popupService.open(comp, {\n title: `${titleBase} — ${suffix}`,\n size: 'lg',\n data: {\n messages: entry?.messages ?? [],\n emptyHint: entry?.messages?.length ? undefined : missing,\n },\n });\n }\n\n /**\n * Deep-clones chat messages into plain JSON data for {@link openMessagesLogDialog}.\n */\n private cloneMessagesForJsonViewer(messages: AXPAiChatMessage[]): unknown {\n try {\n return structuredClone(messages);\n } catch {\n return JSON.parse(JSON.stringify(messages)) as unknown;\n }\n }\n\n /**\n * Downloads the current transcript as a pretty-printed JSON file (browser only).\n */\n downloadMessagesJson(): void {\n if (!isPlatformBrowser(this.platformId)) {\n return;\n }\n const data = this.cloneMessagesForJsonViewer(this.fullTranscriptMessages());\n const json = JSON.stringify(data, null, 2);\n const blob = new Blob([json], { type: 'application/json;charset=utf-8' });\n const url = URL.createObjectURL(blob);\n const anchor = document.createElement('a');\n anchor.href = url;\n anchor.download = this.buildChatTranscriptFilename();\n anchor.click();\n URL.revokeObjectURL(url);\n }\n\n private buildChatTranscriptFilename(): string {\n const stamp = new Date().toISOString().replace(/[:.]/g, '-');\n return `ai-chat-messages-${stamp}.json`;\n }\n\n /**\n * Opens a layout-builder dialog to edit tool arguments and runs the same command or query\n * directly via {@link AXPCommandService} / {@link AXPQueryService}.\n */\n async openToolExecuteDialog(call: AXPAiToolCall): Promise<void> {\n await this.chatToolExecute.openToolExecuteDialog(call);\n }\n\n async send(): Promise<void> {\n if (!this.canSend() || this.isBusy()) {\n return;\n }\n\n const text = this.input().trim();\n const gid = this.draftAttachmentGroupId()?.trim();\n const draftImg = this.draftComposerImages();\n const draftAud = this.draftComposerAudios();\n const draftFiles = this.draftComposerFiles();\n\n let nextMessages: AXPAiChatMessage[];\n\n if (gid && (draftImg.length > 0 || draftAud.length > 0 || draftFiles.length > 0)) {\n for (const s of draftImg) {\n const fid = s.fileId?.trim();\n if (!fid) {\n const errTitle = await this.translateService.translateAsync('@general:messages.error.title');\n const msg = await this.translateService.translateAsync('@ai-management:chat.images-still-saving');\n await this.toastService.show({ color: 'warning', title: errTitle, content: msg });\n return;\n }\n }\n for (const s of draftAud) {\n const fid = s.fileId?.trim();\n if (!fid) {\n const errTitle = await this.translateService.translateAsync('@general:messages.error.title');\n const msg = await this.translateService.translateAsync('@ai-management:chat.audio-still-saving');\n await this.toastService.show({ color: 'warning', title: errTitle, content: msg });\n return;\n }\n }\n for (const s of draftFiles) {\n const fid = s.fileId?.trim();\n if (!fid) {\n const errTitle = await this.translateService.translateAsync('@general:messages.error.title');\n const msg = await this.translateService.translateAsync('@ai-management:chat.documents-still-saving');\n await this.toastService.show({ color: 'warning', title: errTitle, content: msg });\n return;\n }\n }\n const responses: AXPAiChatResponse[] = [\n ...draftImg.map((s) => ({\n type: 'image' as const,\n content: {\n fileId: s.fileId!.trim(),\n mimeType: s.mimeType.trim() || 'application/octet-stream',\n ...(s.name?.trim() ? { name: s.name.trim() } : {}),\n },\n })),\n ...draftAud.map((s) => ({\n type: 'audio' as const,\n content: {\n fileId: s.fileId!.trim(),\n mimeType: s.mimeType.trim() || 'application/octet-stream',\n ...(s.name?.trim() ? { name: s.name.trim() } : {}),\n },\n })),\n ...draftFiles.map((s) => ({\n type: 'file' as const,\n content: {\n fileId: s.fileId!.trim(),\n mimeType: s.mimeType.trim() || 'application/octet-stream',\n ...(s.name?.trim() ? { name: s.name.trim() } : {}),\n },\n })),\n ];\n if (text) {\n responses.push({ type: 'text', content: text });\n }\n nextMessages = [...this.messages(), axpAiChatUserMessage(responses)];\n } else if (text) {\n nextMessages = [...this.messages(), axpAiChatTextMessage('user', text)];\n } else {\n return;\n }\n\n this.clearComposerDraftState();\n this.input.set('');\n await this.runAgentWithMessages(nextMessages);\n }\n\n private async runAgentWithMessages(nextMessages: AXPAiChatMessage[]): Promise<void> {\n this.messages.set(nextMessages);\n this.isBusy.set(true);\n this.lastUsageTotals.set(null);\n this.streamingAssistantPreview.set('');\n this.streamingThinkPreview.set('');\n this.liveToolCalls.set([]);\n this.delegatedNestedLiveToolCalls.set(new Map());\n this.delegatedNestedStreamingPreview.set(new Map());\n this.delegatedAgentReflectionLoading.set(false);\n\n try {\n const platformRuntimeContext = await this.platformRuntimeContextBuilder.build();\n const directAgentId = this.selectedDirectAgentId()?.trim();\n const assistId = this.selectedAssistId()?.trim();\n const result = await this.aiManager.runEngine({\n messages: nextMessages,\n platformRuntimeContext,\n ...(directAgentId ? { directAgentId } : assistId ? { assistId } : {}),\n onRunEvent: (event: AXPAiEngineRunEvent) => {\n switch (event.type) {\n case 'assistant_stream_reset':\n // Clear only the main assistant buffer. Keep `streamingThinkPreview` so planning\n // (segment `think`) stays visible until `messages()` is updated at run end — the\n // engine emits this reset between the planning call and the tool-enabled main step.\n this.streamingAssistantPreview.set('');\n break;\n case 'assistant_stream_delta': {\n const seg = event.segment ?? 'text';\n if (seg === 'think') {\n this.streamingThinkPreview.update((prev) => prev + event.delta);\n } else {\n this.streamingAssistantPreview.update((prev) => prev + event.delta);\n }\n break;\n }\n case 'tool_call_start':\n this.liveToolCalls.update((prev) => [...prev, { call: event.call, state: 'running' }]);\n break;\n case 'tool_call_end':\n this.liveToolCalls.update((prev) =>\n prev.map((t) =>\n t.call.id === event.call.id\n ? {\n ...t,\n state: 'done' as const,\n resultContent: axpAiChatToolOrAgentResultBodyJson(event.resultMessage),\n }\n : t,\n ),\n );\n break;\n case 'delegated_agent_nested_tool_call_start':\n this.pushDelegatedNestedLiveTool(event.ctx, event.call);\n break;\n case 'delegated_agent_nested_tool_call_end':\n this.completeDelegatedNestedLiveTool(event.ctx, event.call, event.resultMessage);\n break;\n case 'delegated_agent_nested_stream_reset':\n this.resetDelegatedNestedStreamingPreview(event.ctx);\n break;\n case 'delegated_agent_nested_stream_delta':\n this.appendDelegatedNestedStreamingPreview(event.ctx, event.delta);\n break;\n case 'delegated_agent_reflection_phase':\n this.delegatedAgentReflectionLoading.set(event.active);\n break;\n default:\n break;\n }\n },\n });\n this.messages.set(result.messages);\n this.lastUsageTotals.set(result.usageTotals ?? null);\n if (result.delegatedTranscriptsByCallId && Object.keys(result.delegatedTranscriptsByCallId).length > 0) {\n this.delegatedTranscriptsByCallId.update((prev) => ({\n ...prev,\n ...result.delegatedTranscriptsByCallId,\n }));\n }\n } catch (err) {\n const message = err instanceof Error ? err.message : String(err);\n this.messages.set([...this.messages(), axpAiChatTextMessage('assistant', message)]);\n } finally {\n this.streamingAssistantPreview.set('');\n this.streamingThinkPreview.set('');\n this.liveToolCalls.set([]);\n this.delegatedNestedLiveToolCalls.set(new Map());\n this.delegatedNestedStreamingPreview.set(new Map());\n this.delegatedAgentReflectionLoading.set(false);\n this.isBusy.set(false);\n }\n }\n\n /**\n * Streaming assistant text for one delegation id (delegated agent sub-run).\n */\n protected nestedDelegatedStreamingPreviewFor(delegationCallId: string): string {\n const id = delegationCallId?.trim();\n if (!id) {\n return '';\n }\n return this.delegatedNestedStreamingPreview().get(id) ?? '';\n }\n\n private resetDelegatedNestedStreamingPreview(ctx: AXPAiDelegatedNestedToolCallContext): void {\n const id = ctx.delegationCallId?.trim();\n if (!id) {\n return;\n }\n this.delegatedNestedStreamingPreview.update((m) => {\n const next = new Map(m);\n next.set(id, '');\n return next;\n });\n }\n\n private appendDelegatedNestedStreamingPreview(ctx: AXPAiDelegatedNestedToolCallContext, delta: string): void {\n const id = ctx.delegationCallId?.trim();\n if (!id) {\n return;\n }\n this.delegatedNestedStreamingPreview.update((m) => {\n const next = new Map(m);\n const prev = next.get(id) ?? '';\n next.set(id, prev + delta);\n return next;\n });\n }\n\n /**\n * Live nested tools for a supervisor `agent:*` tool_call id (delegation collapse).\n */\n protected nestedDelegatedLiveToolCallsFor(delegationCallId: string): AXMAiLiveToolCallStatus[] {\n const id = delegationCallId?.trim();\n if (!id) {\n return [];\n }\n return this.delegatedNestedLiveToolCalls().get(id) ?? [];\n }\n\n private pushDelegatedNestedLiveTool(ctx: AXPAiDelegatedNestedToolCallContext, call: AXPAiToolCall): void {\n const id = ctx.delegationCallId?.trim();\n if (!id) {\n return;\n }\n this.delegatedNestedLiveToolCalls.update((m) => {\n const next = new Map(m);\n const prev = next.get(id) ?? [];\n next.set(id, [...prev, { call, state: 'running' }]);\n return next;\n });\n }\n\n private completeDelegatedNestedLiveTool(\n ctx: AXPAiDelegatedNestedToolCallContext,\n call: AXPAiToolCall,\n resultMessage: AXPAiChatMessage,\n ): void {\n const id = ctx.delegationCallId?.trim();\n if (!id) {\n return;\n }\n const resultContent = axpAiChatToolOrAgentResultBodyJson(resultMessage);\n this.delegatedNestedLiveToolCalls.update((m) => {\n const next = new Map(m);\n const prev = next.get(id) ?? [];\n next.set(\n id,\n prev.map((t) =>\n t.call.id === call.id ? { ...t, state: 'done' as const, resultContent } : t,\n ),\n );\n return next;\n });\n }\n\n //#endregion\n\n //#region ---- Assist & models ----\n\n private async loadAssistPickerRowsFromManager(): Promise<void> {\n this.assistPickerRows = await this.aiManager.listAssistPickerRows();\n }\n\n private async loadAgentPickerRowsFromManager(): Promise<void> {\n this.agentPickerRows = await this.aiManager.listAgentPickerRows();\n }\n\n private async onAssistPicked(assistId: string): Promise<void> {\n if (this.selectedAssistId() === assistId && !this.selectedDirectAgentId()?.trim()) {\n return;\n }\n this.selectedDirectAgentId.set(undefined);\n this.selectedAssistId.set(assistId);\n this.messages.set([]);\n this.assistBootstrapMessages.set([]);\n this.selectedModelId.set(undefined);\n this.lastUsageTotals.set(null);\n this.delegatedTranscriptsByCallId.set({});\n this.clearComposerDraftState();\n await this.router.navigate([], {\n relativeTo: this.route,\n queryParams: { assistId, assist: null, agentId: null },\n queryParamsHandling: 'merge',\n replaceUrl: true,\n });\n await this.loadEffectiveAssistForChat();\n this.seedInitialMessagesFromEffectiveAssist();\n await this.loadModels();\n this.recompute();\n }\n\n private async onAgentPicked(agentId: string): Promise<void> {\n if (this.selectedDirectAgentId() === agentId) {\n return;\n }\n this.selectedAssistId.set(undefined);\n this.selectedDirectAgentId.set(agentId);\n this.messages.set([]);\n this.assistBootstrapMessages.set([]);\n this.selectedModelId.set(undefined);\n this.lastUsageTotals.set(null);\n this.delegatedTranscriptsByCallId.set({});\n this.clearComposerDraftState();\n await this.router.navigate([], {\n relativeTo: this.route,\n queryParams: { agentId, assistId: null, assist: null },\n queryParamsHandling: 'merge',\n replaceUrl: true,\n });\n await this.loadEffectiveAssistForChat();\n this.seedInitialMessagesFromEffectiveAssist();\n await this.loadModels();\n this.recompute();\n }\n\n /**\n * Loads assist-configured greeting lines for display only (see {@link assistBootstrapMessages}).\n */\n private seedInitialMessagesFromEffectiveAssist(): void {\n if (this.messages().length > 0) {\n return;\n }\n const assist = this.effectiveAssist();\n if (!assist) {\n this.assistBootstrapMessages.set([]);\n return;\n }\n const seed = axpAiAssistInitialMessagesToTranscript(assist.initialMessages);\n this.assistBootstrapMessages.set(seed);\n }\n\n private async loadEffectiveAssistForChat(): Promise<void> {\n this.assistLoadError.set(false);\n if (this.selectedDirectAgentId()?.trim()) {\n this.effectiveAssist.set(null);\n return;\n }\n try {\n const id = this.selectedAssistId()?.trim();\n const assist = await this.aiManager.getAssistForChat(id || undefined);\n this.effectiveAssist.set(assist);\n } catch {\n this.effectiveAssist.set(null);\n this.assistLoadError.set(true);\n }\n }\n\n private async loadModels(): Promise<void> {\n try {\n const rows = await this.modelCatalog.listModels({});\n const directAgentId = this.selectedDirectAgentId()?.trim();\n let preferredId: string | undefined;\n if (directAgentId) {\n const ag = await this.agentData.byKey(directAgentId);\n preferredId = ag?.modelEntityId?.trim();\n if (!preferredId) {\n const assist = await this.aiManager.getEffectiveAssist();\n preferredId = assist.modelId?.trim();\n }\n } else {\n preferredId = this.effectiveAssist()?.modelId?.trim();\n }\n const preferred = preferredId ? rows.find((r) => r.id === preferredId) : undefined;\n const ordered = preferred\n ? [preferred, ...rows.filter((r) => r.id !== preferredId)]\n : rows;\n this.modelRows.set(ordered);\n if (preferredId) {\n this.selectedModelId.set(preferredId);\n } else if (ordered[0]?.id) {\n this.selectedModelId.set(ordered[0].id);\n } else {\n this.selectedModelId.set(undefined);\n }\n } catch {\n this.modelRows.set([]);\n this.selectedModelId.set(undefined);\n }\n }\n\n //#endregion\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { AXBasePageComponent } from '@acorex/components/page';\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXFormModule } from '@acorex/components/form';\nimport { AXTextAreaModule } from '@acorex/components/text-area';\nimport { AXToastService } from '@acorex/components/toast';\nimport type { AXPAiAssistRunResult } from '../../ai-assist.types';\nimport { AXTranslationModule, AXTranslationService } from '@acorex/core/translation';\nimport { CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n OnInit,\n inject,\n signal,\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\n\n//#endregion\n\n//#region ---- Types ----\n\n/** Popup `data` payload from {@link AXPAiManagerService.show}. */\nexport interface AXMAiAssistPromptPopupData {\n placeholder?: string;\n initialPrompt?: string;\n onSubmit: (prompt: string) => Promise<AXPAiAssistRunResult>;\n}\n\n//#endregion\n\n//#region ---- Component ----\n\n@Component({\n selector: 'axm-ai-assist-prompt-popup',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [CommonModule, FormsModule, AXButtonModule, AXFormModule, AXTextAreaModule, AXTranslationModule],\n template: `\n <div class=\"ax-flex ax-flex-col ax-gap-4 ax-min-h-0\">\n <ax-form-field>\n <ax-text-area\n [rows]=\"6\"\n [disabled]=\"busy()\"\n [ngModel]=\"promptDraft()\"\n (ngModelChange)=\"onPromptDraftChange($event)\"\n [placeholder]=\"\n placeholder && placeholder.trim().length > 0\n ? placeholder\n : ((('@ai-management:assist-popup.placeholder' | translate | async) ?? ''))\n \"\n ></ax-text-area>\n </ax-form-field>\n\n <div class=\"ax-flex ax-flex-wrap ax-items-center ax-justify-end ax-gap-2\">\n <ax-button\n look=\"outline\"\n color=\"secondary\"\n type=\"button\"\n [disabled]=\"busy()\"\n [text]=\"('@ai-management:assist-popup.cancel' | translate | async) ?? ''\"\n (onClick)=\"onCancel()\"\n ></ax-button>\n <ax-button\n color=\"primary\"\n type=\"button\"\n [disabled]=\"busy() || !canSend()\"\n [text]=\"\n busy()\n ? (('@ai-management:assist-popup.sending' | translate | async) ?? '')\n : (('@ai-management:assist-popup.send' | translate | async) ?? '')\n \"\n (onClick)=\"onSend()\"\n ></ax-button>\n </div>\n </div>\n `,\n})\nexport class AXMAiAssistPromptPopupComponent extends AXBasePageComponent implements OnInit {\n //#region ---- Services & Dependencies ----\n\n private readonly toastService = inject(AXToastService);\n private readonly translation = inject(AXTranslationService);\n\n //#endregion\n\n //#region ---- Popup data (assigned by AXPopupService when used as a dialog page) ----\n\n /** Optional placeholder from caller; falls back to translated default. */\n placeholder?: string;\n\n initialPrompt?: string;\n\n onSubmit!: (prompt: string) => Promise<AXPAiAssistRunResult>;\n\n //#endregion\n\n //#region ---- State ----\n\n readonly promptDraft = signal('');\n\n readonly busy = signal(false);\n\n //#endregion\n\n //#region ---- Lifecycle ----\n\n override ngOnInit(): void {\n super.ngOnInit();\n this.promptDraft.set(this.initialPrompt?.trim() ?? '');\n }\n\n //#endregion\n\n //#region ---- UI Handlers ----\n\n onPromptDraftChange(value: string | null | undefined): void {\n this.promptDraft.set((value ?? '').toString());\n }\n\n canSend(): boolean {\n return this.promptDraft().trim().length > 0;\n }\n\n onCancel(): void {\n this.close(null);\n }\n\n async onSend(): Promise<void> {\n const text = this.promptDraft().trim();\n if (!text || !this.onSubmit) {\n return;\n }\n this.busy.set(true);\n try {\n const result = await this.onSubmit(text);\n this.close(result);\n } catch (err) {\n const title = await this.translation.translateAsync('@general:messages.error.title');\n const fallback = await this.translation.translateAsync('@ai-management:assist-popup.run-error');\n const content = err instanceof Error ? err.message : fallback;\n await this.toastService.show({ color: 'danger', title, content });\n } finally {\n this.busy.set(false);\n }\n }\n\n //#endregion\n}\n\n//#endregion\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["PlatformManagementRootConfig","tryParseBalancedJsonObjectAt","i7","axmParseAssistantMessageForDisplayFromMessage","i4","i5","i6"],"mappings":"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"}