@acorex/modules 21.0.0-next.89 → 21.0.0-next.90

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 (91) hide show
  1. package/fesm2022/acorex-modules-common.mjs +9 -9
  2. package/fesm2022/acorex-modules-common.mjs.map +1 -1
  3. package/fesm2022/{acorex-modules-conversation-acorex-modules-conversation-B_JcAHvL.mjs → acorex-modules-conversation-acorex-modules-conversation-Dc8te-PO.mjs} +364 -237
  4. package/fesm2022/acorex-modules-conversation-acorex-modules-conversation-Dc8te-PO.mjs.map +1 -0
  5. package/fesm2022/{acorex-modules-conversation-after-message-sent.command-DcrS7_vV.mjs → acorex-modules-conversation-after-message-sent.command-DxDe6o9N.mjs} +2 -2
  6. package/fesm2022/{acorex-modules-conversation-after-message-sent.command-DcrS7_vV.mjs.map → acorex-modules-conversation-after-message-sent.command-DxDe6o9N.mjs.map} +1 -1
  7. package/fesm2022/{acorex-modules-conversation-assist-delegated-agent-detail-popup.component-BCkJEAmX.mjs → acorex-modules-conversation-assist-delegated-agent-detail-popup.component-Dyx_n0bi.mjs} +3 -3
  8. package/fesm2022/{acorex-modules-conversation-assist-delegated-agent-detail-popup.component-BCkJEAmX.mjs.map → acorex-modules-conversation-assist-delegated-agent-detail-popup.component-Dyx_n0bi.mjs.map} +1 -1
  9. package/fesm2022/{acorex-modules-conversation-comments-page.component-B6TJhe4T.mjs → acorex-modules-conversation-comments-page.component--g4ugC_L.mjs} +2 -2
  10. package/fesm2022/{acorex-modules-conversation-comments-page.component-B6TJhe4T.mjs.map → acorex-modules-conversation-comments-page.component--g4ugC_L.mjs.map} +1 -1
  11. package/fesm2022/{acorex-modules-conversation-emit-typing-indicator.command-CWRdPl-S.mjs → acorex-modules-conversation-emit-typing-indicator.command-BOldPLQ0.mjs} +2 -2
  12. package/fesm2022/{acorex-modules-conversation-emit-typing-indicator.command-CWRdPl-S.mjs.map → acorex-modules-conversation-emit-typing-indicator.command-BOldPLQ0.mjs.map} +1 -1
  13. package/fesm2022/{acorex-modules-conversation-mark-conversation-unread.command-CZlsLAsb.mjs → acorex-modules-conversation-mark-conversation-unread.command-O_zPrBQ0.mjs} +2 -2
  14. package/fesm2022/{acorex-modules-conversation-mark-conversation-unread.command-CZlsLAsb.mjs.map → acorex-modules-conversation-mark-conversation-unread.command-O_zPrBQ0.mjs.map} +1 -1
  15. package/fesm2022/{acorex-modules-conversation-retry-assist-response.command-Cly1-RKt.mjs → acorex-modules-conversation-retry-assist-response.command-DsB-CP3R.mjs} +2 -2
  16. package/fesm2022/{acorex-modules-conversation-retry-assist-response.command-Cly1-RKt.mjs.map → acorex-modules-conversation-retry-assist-response.command-DsB-CP3R.mjs.map} +1 -1
  17. package/fesm2022/{acorex-modules-conversation-send-assist-chat-message.command-D5QWTKqh.mjs → acorex-modules-conversation-send-assist-chat-message.command-g_NgPuxP.mjs} +2 -2
  18. package/fesm2022/{acorex-modules-conversation-send-assist-chat-message.command-D5QWTKqh.mjs.map → acorex-modules-conversation-send-assist-chat-message.command-g_NgPuxP.mjs.map} +1 -1
  19. package/fesm2022/{acorex-modules-conversation-start-assist-chat.command-DkSZj8fj.mjs → acorex-modules-conversation-start-assist-chat.command-DeMmJdd6.mjs} +2 -2
  20. package/fesm2022/{acorex-modules-conversation-start-assist-chat.command-DkSZj8fj.mjs.map → acorex-modules-conversation-start-assist-chat.command-DeMmJdd6.mjs.map} +1 -1
  21. package/fesm2022/{acorex-modules-conversation-sync-read-state.command-jiEsdxUB.mjs → acorex-modules-conversation-sync-read-state.command-4YxdwLaE.mjs} +2 -2
  22. package/fesm2022/{acorex-modules-conversation-sync-read-state.command-jiEsdxUB.mjs.map → acorex-modules-conversation-sync-read-state.command-4YxdwLaE.mjs.map} +1 -1
  23. package/fesm2022/acorex-modules-conversation.mjs +1 -1
  24. package/fesm2022/{acorex-modules-dashboard-management-acorex-modules-dashboard-management-DLuhOPFz.mjs → acorex-modules-dashboard-management-acorex-modules-dashboard-management-kph3UxDu.mjs} +94 -41
  25. package/fesm2022/acorex-modules-dashboard-management-acorex-modules-dashboard-management-kph3UxDu.mjs.map +1 -0
  26. package/fesm2022/{acorex-modules-dashboard-management-index-gjCiELmH.mjs → acorex-modules-dashboard-management-index-rp9dgARq.mjs} +2 -2
  27. package/fesm2022/{acorex-modules-dashboard-management-index-gjCiELmH.mjs.map → acorex-modules-dashboard-management-index-rp9dgARq.mjs.map} +1 -1
  28. package/fesm2022/acorex-modules-dashboard-management.mjs +1 -1
  29. package/fesm2022/{acorex-modules-document-management-drive-choose.component-DyJoXajP.mjs → acorex-modules-document-management-drive-choose.component-Dx1slMSA.mjs} +3 -3
  30. package/fesm2022/{acorex-modules-document-management-drive-choose.component-DyJoXajP.mjs.map → acorex-modules-document-management-drive-choose.component-Dx1slMSA.mjs.map} +1 -1
  31. package/fesm2022/acorex-modules-document-management.mjs +268 -351
  32. package/fesm2022/acorex-modules-document-management.mjs.map +1 -1
  33. package/fesm2022/{acorex-modules-human-capital-management-acorex-modules-human-capital-management-VJ2NUSm1.mjs → acorex-modules-human-capital-management-acorex-modules-human-capital-management-BZwLfZkb.mjs} +42 -21
  34. package/fesm2022/acorex-modules-human-capital-management-acorex-modules-human-capital-management-BZwLfZkb.mjs.map +1 -0
  35. package/fesm2022/{acorex-modules-human-capital-management-approve-leave-request.command-FgXkyZR_.mjs → acorex-modules-human-capital-management-approve-leave-request.command-B_EBDijL.mjs} +2 -2
  36. package/fesm2022/{acorex-modules-human-capital-management-approve-leave-request.command-FgXkyZR_.mjs.map → acorex-modules-human-capital-management-approve-leave-request.command-B_EBDijL.mjs.map} +1 -1
  37. package/fesm2022/{acorex-modules-human-capital-management-assign-position-assignment.command-D2yCvifI.mjs → acorex-modules-human-capital-management-assign-position-assignment.command-ZzWBeTv1.mjs} +2 -2
  38. package/fesm2022/{acorex-modules-human-capital-management-assign-position-assignment.command-D2yCvifI.mjs.map → acorex-modules-human-capital-management-assign-position-assignment.command-ZzWBeTv1.mjs.map} +1 -1
  39. package/fesm2022/{acorex-modules-human-capital-management-cancel-leave-request.command-DnmsVNwU.mjs → acorex-modules-human-capital-management-cancel-leave-request.command-Bd3RvlNm.mjs} +2 -2
  40. package/fesm2022/{acorex-modules-human-capital-management-cancel-leave-request.command-DnmsVNwU.mjs.map → acorex-modules-human-capital-management-cancel-leave-request.command-Bd3RvlNm.mjs.map} +1 -1
  41. package/fesm2022/{acorex-modules-human-capital-management-edit-personal-info.command-B0ZUfbqn.mjs → acorex-modules-human-capital-management-edit-personal-info.command-Drbi1WMd.mjs} +2 -2
  42. package/fesm2022/{acorex-modules-human-capital-management-edit-personal-info.command-B0ZUfbqn.mjs.map → acorex-modules-human-capital-management-edit-personal-info.command-Drbi1WMd.mjs.map} +1 -1
  43. package/fesm2022/{acorex-modules-human-capital-management-edit-signature.command-h2kTqSg0.mjs → acorex-modules-human-capital-management-edit-signature.command-CRPqnXIj.mjs} +2 -2
  44. package/fesm2022/{acorex-modules-human-capital-management-edit-signature.command-h2kTqSg0.mjs.map → acorex-modules-human-capital-management-edit-signature.command-CRPqnXIj.mjs.map} +1 -1
  45. package/fesm2022/{acorex-modules-human-capital-management-reject-leave-request.command-BdrdgvbN.mjs → acorex-modules-human-capital-management-reject-leave-request.command-BC-1Kixd.mjs} +2 -2
  46. package/fesm2022/{acorex-modules-human-capital-management-reject-leave-request.command-BdrdgvbN.mjs.map → acorex-modules-human-capital-management-reject-leave-request.command-BC-1Kixd.mjs.map} +1 -1
  47. package/fesm2022/{acorex-modules-human-capital-management-revoke-position-assignment.command-S7Px6Y4B.mjs → acorex-modules-human-capital-management-revoke-position-assignment.command-Caylq9Rv.mjs} +2 -2
  48. package/fesm2022/{acorex-modules-human-capital-management-revoke-position-assignment.command-S7Px6Y4B.mjs.map → acorex-modules-human-capital-management-revoke-position-assignment.command-Caylq9Rv.mjs.map} +1 -1
  49. package/fesm2022/{acorex-modules-human-capital-management-start-leave-request-flow.command-C_tE-D_Y.mjs → acorex-modules-human-capital-management-start-leave-request-flow.command-BsEwA1VM.mjs} +2 -2
  50. package/fesm2022/{acorex-modules-human-capital-management-start-leave-request-flow.command-C_tE-D_Y.mjs.map → acorex-modules-human-capital-management-start-leave-request-flow.command-BsEwA1VM.mjs.map} +1 -1
  51. package/fesm2022/{acorex-modules-human-capital-management-start-lifecycle-event-flow.command-mMP3Yy01.mjs → acorex-modules-human-capital-management-start-lifecycle-event-flow.command-B8xK2iTn.mjs} +2 -2
  52. package/fesm2022/{acorex-modules-human-capital-management-start-lifecycle-event-flow.command-mMP3Yy01.mjs.map → acorex-modules-human-capital-management-start-lifecycle-event-flow.command-B8xK2iTn.mjs.map} +1 -1
  53. package/fesm2022/acorex-modules-human-capital-management.mjs +1 -1
  54. package/fesm2022/acorex-modules-platform-dev-tools.mjs +2 -2
  55. package/fesm2022/acorex-modules-platform-dev-tools.mjs.map +1 -1
  56. package/fesm2022/acorex-modules-project-management.mjs +707 -424
  57. package/fesm2022/acorex-modules-project-management.mjs.map +1 -1
  58. package/fesm2022/acorex-modules-report-management.mjs +1 -1
  59. package/fesm2022/acorex-modules-report-management.mjs.map +1 -1
  60. package/fesm2022/acorex-modules-task-management-start-task-flow.command-HYdQOWDe.mjs +115 -0
  61. package/fesm2022/acorex-modules-task-management-start-task-flow.command-HYdQOWDe.mjs.map +1 -0
  62. package/fesm2022/{acorex-modules-task-management-task-board.page-DTWxd_vG.mjs → acorex-modules-task-management-task-board.page-BMTjJlry.mjs} +3 -3
  63. package/fesm2022/{acorex-modules-task-management-task-board.page-DTWxd_vG.mjs.map → acorex-modules-task-management-task-board.page-BMTjJlry.mjs.map} +1 -1
  64. package/fesm2022/acorex-modules-task-management.mjs +433 -460
  65. package/fesm2022/acorex-modules-task-management.mjs.map +1 -1
  66. package/fesm2022/{acorex-modules-timesheet-management-report-hours-by-project.query-z38wZLKJ.mjs → acorex-modules-timesheet-management-report-hours-by-project.query-CGc1Q6aB.mjs} +2 -2
  67. package/fesm2022/acorex-modules-timesheet-management-report-hours-by-project.query-CGc1Q6aB.mjs.map +1 -0
  68. package/fesm2022/{acorex-modules-timesheet-management-resolve-work-item-from-jira-issue.command-BDfvz6fH.mjs → acorex-modules-timesheet-management-resolve-work-item-from-jira-issue.command-AIcAUd3s.mjs} +2 -2
  69. package/fesm2022/{acorex-modules-timesheet-management-resolve-work-item-from-jira-issue.command-BDfvz6fH.mjs.map → acorex-modules-timesheet-management-resolve-work-item-from-jira-issue.command-AIcAUd3s.mjs.map} +1 -1
  70. package/fesm2022/acorex-modules-timesheet-management.mjs +8 -8
  71. package/fesm2022/acorex-modules-timesheet-management.mjs.map +1 -1
  72. package/fesm2022/acorex-modules-workplacesafety-management-control-hierarchy-diagram-widget-edit.component-CFF7X1MO.mjs +70 -0
  73. package/fesm2022/acorex-modules-workplacesafety-management-control-hierarchy-diagram-widget-edit.component-CFF7X1MO.mjs.map +1 -0
  74. package/fesm2022/acorex-modules-workplacesafety-management-control-hierarchy-diagram-widget-view.component-DwC2aHVt.mjs +70 -0
  75. package/fesm2022/acorex-modules-workplacesafety-management-control-hierarchy-diagram-widget-view.component-DwC2aHVt.mjs.map +1 -0
  76. package/fesm2022/acorex-modules-workplacesafety-management-control-hierarchy-diagram.types-DmzV305e.mjs +195 -0
  77. package/fesm2022/acorex-modules-workplacesafety-management-control-hierarchy-diagram.types-DmzV305e.mjs.map +1 -0
  78. package/fesm2022/acorex-modules-workplacesafety-management.mjs +139 -16
  79. package/fesm2022/acorex-modules-workplacesafety-management.mjs.map +1 -1
  80. package/package.json +2 -2
  81. package/types/acorex-modules-dashboard-management.d.ts +30 -11
  82. package/types/acorex-modules-document-management.d.ts +21 -5
  83. package/types/acorex-modules-human-capital-management.d.ts +4 -0
  84. package/types/acorex-modules-project-management.d.ts +46 -23
  85. package/types/acorex-modules-task-management.d.ts +80 -11
  86. package/types/acorex-modules-timesheet-management.d.ts +2 -2
  87. package/types/acorex-modules-workplacesafety-management.d.ts +7 -2
  88. package/fesm2022/acorex-modules-conversation-acorex-modules-conversation-B_JcAHvL.mjs.map +0 -1
  89. package/fesm2022/acorex-modules-dashboard-management-acorex-modules-dashboard-management-DLuhOPFz.mjs.map +0 -1
  90. package/fesm2022/acorex-modules-human-capital-management-acorex-modules-human-capital-management-VJ2NUSm1.mjs.map +0 -1
  91. package/fesm2022/acorex-modules-timesheet-management-report-hours-by-project.query-z38wZLKJ.mjs.map +0 -1
@@ -1,6 +1,6 @@
1
1
  import * as i0 from '@angular/core';
2
2
  import { inject, Injectable } from '@angular/core';
3
- import { b as AXMConversationEntityStoreService, c as AXM_CONVERSATION_ASSIST_RESPONSE_PORT, d as AXM_CONVERSATION_REGULAR_AUTO_REPLY_PORT, e as axmConversationHasAiChat } from './acorex-modules-conversation-acorex-modules-conversation-B_JcAHvL.mjs';
3
+ import { b as AXMConversationEntityStoreService, c as AXM_CONVERSATION_ASSIST_RESPONSE_PORT, d as AXM_CONVERSATION_REGULAR_AUTO_REPLY_PORT, e as axmConversationHasAiChat } from './acorex-modules-conversation-acorex-modules-conversation-Dc8te-PO.mjs';
4
4
 
5
5
  //#endregion
6
6
  //#region ---- Command ----
@@ -31,4 +31,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
31
31
  }] });
32
32
 
33
33
  export { AXMConversationAfterMessageSentCommand };
34
- //# sourceMappingURL=acorex-modules-conversation-after-message-sent.command-DcrS7_vV.mjs.map
34
+ //# sourceMappingURL=acorex-modules-conversation-after-message-sent.command-DxDe6o9N.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"acorex-modules-conversation-after-message-sent.command-DcrS7_vV.mjs","sources":["../../../../libs/modules/conversation/src/lib/features/commands/after-message-sent.command.ts"],"sourcesContent":["//#region ---- Imports ----\n\nimport type { AXSendMessageCommand } from '@acorex/components/conversation2';\nimport { AXPExecuteCommandResult } from '@acorex/platform/contracts';\nimport { AXPCommand } from '@acorex/platform/runtime';\nimport { Injectable, inject } from '@angular/core';\n\nimport { AXM_CONVERSATION_ASSIST_RESPONSE_PORT } from '../chat/services/conversation-assist-response.port';\nimport { AXMConversationEntityStoreService } from '../chat/services/conversation-entity-store.service';\nimport { axmConversationHasAiChat } from '../chat/plugins/utils/assist-metadata.util';\nimport { AXM_CONVERSATION_REGULAR_AUTO_REPLY_PORT } from '../chat/services/conversation-regular-auto-reply.port';\n\n//#endregion\n\n//#region ---- Types ----\n\nexport interface AXMAfterMessageSentOptions {\n conversationId: string;\n messageId: string;\n command: AXSendMessageCommand;\n currentUserId: string;\n}\n\n//#endregion\n\n//#region ---- Command ----\n\n@Injectable({ providedIn: 'root' })\nexport class AXMConversationAfterMessageSentCommand implements AXPCommand<AXMAfterMessageSentOptions, void> {\n private readonly store = inject(AXMConversationEntityStoreService);\n private readonly assistResponse = inject(AXM_CONVERSATION_ASSIST_RESPONSE_PORT, { optional: true });\n private readonly regularAutoReply = inject(AXM_CONVERSATION_REGULAR_AUTO_REPLY_PORT, { optional: true });\n\n async execute(input: AXMAfterMessageSentOptions | unknown): Promise<AXPExecuteCommandResult<void>> {\n const options = input as AXMAfterMessageSentOptions;\n\n const conversation = await this.store.getConversation(options.conversationId);\n const isAssist = axmConversationHasAiChat(conversation?.metadata as Record<string, unknown>);\n\n if (isAssist && this.assistResponse) {\n await this.assistResponse.handleAfterUserMessage(\n options.conversationId,\n options.messageId,\n options.command,\n options.currentUserId,\n );\n } else if (!isAssist && this.regularAutoReply) {\n await this.regularAutoReply.maybeGenerate(options.command, options.messageId, options.currentUserId);\n }\n\n return { success: true };\n }\n}\n\n//#endregion\n"],"names":[],"mappings":";;;;AAuBA;AAEA;MAGa,sCAAsC,CAAA;AADnD,IAAA,WAAA,GAAA;AAEmB,QAAA,IAAA,CAAA,KAAK,GAAG,MAAM,CAAC,iCAAiC,CAAC;QACjD,IAAA,CAAA,cAAc,GAAG,MAAM,CAAC,qCAAqC,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;QAClF,IAAA,CAAA,gBAAgB,GAAG,MAAM,CAAC,wCAAwC,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AAqBzG,IAAA;IAnBC,MAAM,OAAO,CAAC,KAA2C,EAAA;QACvD,MAAM,OAAO,GAAG,KAAmC;AAEnD,QAAA,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,OAAO,CAAC,cAAc,CAAC;QAC7E,MAAM,QAAQ,GAAG,wBAAwB,CAAC,YAAY,EAAE,QAAmC,CAAC;AAE5F,QAAA,IAAI,QAAQ,IAAI,IAAI,CAAC,cAAc,EAAE;YACnC,MAAM,IAAI,CAAC,cAAc,CAAC,sBAAsB,CAC9C,OAAO,CAAC,cAAc,EACtB,OAAO,CAAC,SAAS,EACjB,OAAO,CAAC,OAAO,EACf,OAAO,CAAC,aAAa,CACtB;QACH;AAAO,aAAA,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,gBAAgB,EAAE;AAC7C,YAAA,MAAM,IAAI,CAAC,gBAAgB,CAAC,aAAa,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,aAAa,CAAC;QACtG;AAEA,QAAA,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE;IAC1B;8GAvBW,sCAAsC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAtC,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,sCAAsC,cADzB,MAAM,EAAA,CAAA,CAAA;;2FACnB,sCAAsC,EAAA,UAAA,EAAA,CAAA;kBADlD,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;;;"}
1
+ {"version":3,"file":"acorex-modules-conversation-after-message-sent.command-DxDe6o9N.mjs","sources":["../../../../libs/modules/conversation/src/lib/features/commands/after-message-sent.command.ts"],"sourcesContent":["//#region ---- Imports ----\n\nimport type { AXSendMessageCommand } from '@acorex/components/conversation2';\nimport { AXPExecuteCommandResult } from '@acorex/platform/contracts';\nimport { AXPCommand } from '@acorex/platform/runtime';\nimport { Injectable, inject } from '@angular/core';\n\nimport { AXM_CONVERSATION_ASSIST_RESPONSE_PORT } from '../chat/services/conversation-assist-response.port';\nimport { AXMConversationEntityStoreService } from '../chat/services/conversation-entity-store.service';\nimport { axmConversationHasAiChat } from '../chat/plugins/utils/assist-metadata.util';\nimport { AXM_CONVERSATION_REGULAR_AUTO_REPLY_PORT } from '../chat/services/conversation-regular-auto-reply.port';\n\n//#endregion\n\n//#region ---- Types ----\n\nexport interface AXMAfterMessageSentOptions {\n conversationId: string;\n messageId: string;\n command: AXSendMessageCommand;\n currentUserId: string;\n}\n\n//#endregion\n\n//#region ---- Command ----\n\n@Injectable({ providedIn: 'root' })\nexport class AXMConversationAfterMessageSentCommand implements AXPCommand<AXMAfterMessageSentOptions, void> {\n private readonly store = inject(AXMConversationEntityStoreService);\n private readonly assistResponse = inject(AXM_CONVERSATION_ASSIST_RESPONSE_PORT, { optional: true });\n private readonly regularAutoReply = inject(AXM_CONVERSATION_REGULAR_AUTO_REPLY_PORT, { optional: true });\n\n async execute(input: AXMAfterMessageSentOptions | unknown): Promise<AXPExecuteCommandResult<void>> {\n const options = input as AXMAfterMessageSentOptions;\n\n const conversation = await this.store.getConversation(options.conversationId);\n const isAssist = axmConversationHasAiChat(conversation?.metadata as Record<string, unknown>);\n\n if (isAssist && this.assistResponse) {\n await this.assistResponse.handleAfterUserMessage(\n options.conversationId,\n options.messageId,\n options.command,\n options.currentUserId,\n );\n } else if (!isAssist && this.regularAutoReply) {\n await this.regularAutoReply.maybeGenerate(options.command, options.messageId, options.currentUserId);\n }\n\n return { success: true };\n }\n}\n\n//#endregion\n"],"names":[],"mappings":";;;;AAuBA;AAEA;MAGa,sCAAsC,CAAA;AADnD,IAAA,WAAA,GAAA;AAEmB,QAAA,IAAA,CAAA,KAAK,GAAG,MAAM,CAAC,iCAAiC,CAAC;QACjD,IAAA,CAAA,cAAc,GAAG,MAAM,CAAC,qCAAqC,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;QAClF,IAAA,CAAA,gBAAgB,GAAG,MAAM,CAAC,wCAAwC,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AAqBzG,IAAA;IAnBC,MAAM,OAAO,CAAC,KAA2C,EAAA;QACvD,MAAM,OAAO,GAAG,KAAmC;AAEnD,QAAA,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,OAAO,CAAC,cAAc,CAAC;QAC7E,MAAM,QAAQ,GAAG,wBAAwB,CAAC,YAAY,EAAE,QAAmC,CAAC;AAE5F,QAAA,IAAI,QAAQ,IAAI,IAAI,CAAC,cAAc,EAAE;YACnC,MAAM,IAAI,CAAC,cAAc,CAAC,sBAAsB,CAC9C,OAAO,CAAC,cAAc,EACtB,OAAO,CAAC,SAAS,EACjB,OAAO,CAAC,OAAO,EACf,OAAO,CAAC,aAAa,CACtB;QACH;AAAO,aAAA,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,gBAAgB,EAAE;AAC7C,YAAA,MAAM,IAAI,CAAC,gBAAgB,CAAC,aAAa,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,aAAa,CAAC;QACtG;AAEA,QAAA,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE;IAC1B;8GAvBW,sCAAsC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAtC,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,sCAAsC,cADzB,MAAM,EAAA,CAAA,CAAA;;2FACnB,sCAAsC,EAAA,UAAA,EAAA,CAAA;kBADlD,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;;;"}
@@ -8,7 +8,7 @@ import * as i0 from '@angular/core';
8
8
  import { input, computed, ViewEncapsulation, ChangeDetectionStrategy, Component } from '@angular/core';
9
9
  import * as i2 from '@acorex/components/decorators';
10
10
  import { AXDecoratorModule } from '@acorex/components/decorators';
11
- import { i as axmSanitizeDebugFilenamePart, j as axmDownloadDebugJson, k as axmAssistSegmentDirection, l as axmParseAssistTranscriptTextEnvelope, m as axmAssistWidgetNodeFromUnknown, n as axmSyntheticEmbedMessage, o as AXMNodeMessageRendererComponent, p as AXMAssistBotFileLineComponent, q as AXMAssistSuggestionChipsComponent } from './acorex-modules-conversation-acorex-modules-conversation-B_JcAHvL.mjs';
11
+ import { i as axmSanitizeDebugFilenamePart, j as axmDownloadDebugJson, k as axmAssistSegmentDirection, l as axmParseAssistTranscriptTextEnvelope, m as axmAssistWidgetNodeFromUnknown, n as axmSyntheticEmbedMessage, o as AXMNodeMessageRendererComponent, p as AXMAssistBotFileLineComponent, q as AXMAssistSuggestionChipsComponent } from './acorex-modules-conversation-acorex-modules-conversation-Dc8te-PO.mjs';
12
12
  import * as i1 from '@acorex/cdk/accordion';
13
13
  import { AXAccordionCdkModule } from '@acorex/cdk/accordion';
14
14
  import * as i5 from '@acorex/components/code-editor';
@@ -223,7 +223,7 @@ class AXMAssistDelegatedAgentTranscriptViewComponent {
223
223
  return candidate.type === 'code' && typeof candidate.language === 'string' && typeof candidate.code === 'string';
224
224
  }
225
225
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXMAssistDelegatedAgentTranscriptViewComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
226
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.9", type: AXMAssistDelegatedAgentTranscriptViewComponent, isStandalone: true, selector: "axm-assist-delegated-agent-transcript-view", inputs: { messages: { classPropertyName: "messages", publicName: "messages", isSignal: true, isRequired: false, transformFunction: null }, embedParent: { classPropertyName: "embedParent", publicName: "embedParent", isSignal: true, isRequired: true, transformFunction: null }, emptyHint: { classPropertyName: "emptyHint", publicName: "emptyHint", isSignal: true, isRequired: false, transformFunction: null }, agentTitleById: { classPropertyName: "agentTitleById", publicName: "agentTitleById", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<div class=\"axm-delegated-transcript\">\n @if (!hasMessages() && emptyHint()) {\n <p class=\"axm-delegated-transcript__empty\">{{ emptyHint() }}</p>\n } @else {\n <div class=\"axm-assist-bot axm-delegated-transcript__lines\" role=\"list\">\n <div class=\"axm-assist-renderer__accordion-group\" axAccordionGroup [accordion]=\"false\">\n @for (item of displayLines(); track item.lineIndex) {\n @let line = item.line;\n @let lineIndex = item.lineIndex;\n <div\n class=\"axm-delegated-transcript__line axm-assist-bot__line axm-assist-renderer__collapse-shell\"\n axAccordionItem\n #roleSection=\"axAccordionItem\"\n role=\"listitem\"\n [class.axm-assist-bot__line--user]=\"line.role === 'user'\"\n [class.axm-assist-bot__line--tool-role]=\"line.role === 'tool'\"\n [attr.data-role]=\"line.role\"\n >\n <header\n class=\"axm-delegated-transcript__role axm-assist-renderer__accordion-header\"\n axAccordionItemHeader\n >\n <span class=\"axm-assist-renderer__accordion-header-main\">\n <span class=\"axm-assist-renderer__accordion-header-title\">\n <i\n class=\"fa-light fa-chevron-down axm-assist-renderer__thinking-chevron\"\n [class.axm-assist-renderer__thinking-chevron--expanded]=\"!roleSection.isCollapsed()\"\n aria-hidden=\"true\"\n ></i>\n <span>{{ roleTranslationKey(line.role) | translate | async }}</span>\n </span>\n @if (line.delegatedReflection) {\n <span class=\"axm-delegated-transcript__reflection-badge\">{{\n '@conversation:chat.assist-renderer.delegated-agent.reflection' | translate | async\n }}</span>\n }\n @if (line.name?.trim()) {\n <span class=\"axm-delegated-transcript__name\">{{ line.name }}</span>\n }\n </span>\n </header>\n\n <div axAccordionItemContent>\n <div class=\"axm-assist-renderer__collapse-body axm-delegated-transcript__segments\">\n @for (seg of line.responses; track segIndex; let segIndex = $index) {\n @if (line.role === 'user' && seg.type === 'file') {\n <axm-assist-bot-file-line\n [parentMessage]=\"embedParent()\"\n [fileId]=\"seg.content.fileId\"\n />\n } @else if (line.role === 'user' && seg.type === 'text') {\n <div class=\"axm-assist-bot__segment\" [attr.dir]=\"segmentDir(seg.content)\">\n <ax-conversation-text-renderer [message]=\"syntheticTextMessage(lineIndex, segIndex, seg.content)\" />\n </div>\n } @else if (line.role === 'assistant' && seg.type === 'think') {\n <details class=\"axm-delegated-transcript__think\" open>\n <summary class=\"axm-delegated-transcript__think-summary\">\n <i class=\"fa-light fa-brain axm-assist-renderer__tool-title-icon\" aria-hidden=\"true\"></i>\n {{ '@conversation:chat.assist-renderer.sections.thinking' | translate | async }}\n </summary>\n <div\n class=\"axm-assist-renderer__thinking-body axm-assist-bot__segment\"\n [attr.dir]=\"segmentDir(seg.content)\"\n >\n {{ seg.content }}\n </div>\n </details>\n } @else if (line.role === 'assistant' && seg.type === 'text') {\n @let parsedLine = parseAssistLineText(seg.content);\n @if (parsedLine.thinking?.trim()) {\n <details class=\"axm-delegated-transcript__think\" open>\n <summary class=\"axm-delegated-transcript__think-summary\">\n <i class=\"fa-light fa-brain axm-assist-renderer__tool-title-icon\" aria-hidden=\"true\"></i>\n {{ '@conversation:chat.assist-renderer.sections.thinking' | translate | async }}\n </summary>\n <div\n class=\"axm-assist-renderer__thinking-body axm-assist-bot__segment\"\n [attr.dir]=\"segmentDir(parsedLine.thinking ?? '')\"\n >\n {{ parsedLine.thinking }}\n </div>\n </details>\n }\n @if (parsedLine.body.trim()) {\n <div\n class=\"axm-assist-bot__segment axm-assist-renderer__markdown\"\n [attr.dir]=\"segmentDir(parsedLine.body)\"\n >\n <axp-markdown-viewer [markdown]=\"parsedLine.body\">\n <ng-template axpMarkdownTemplate=\"code\" let-segment>\n <div class=\"axm-assist-renderer__tool-editor-wrap\" style=\"direction: ltr\">\n <ax-code-editor\n [ngModel]=\"markdownCodeValue(segment)\"\n [readonly]=\"true\"\n [language]=\"markdownCodeLanguage(segment)\"\n [lineNumbers]=\"true\"\n class=\"axm-assist-renderer__tool-editor\"\n ></ax-code-editor>\n </div>\n </ng-template>\n </axp-markdown-viewer>\n </div>\n }\n } @else if (\n line.role === 'assistant' &&\n (seg.type === 'agent' || seg.type === 'tool') &&\n isDelegatedAgentCommand(seg.content.command)\n ) {\n <div\n class=\"axm-assist-renderer__tool-card axm-assist-renderer__collapse-shell axm-delegated-transcript__tool-block\"\n >\n <div class=\"axm-assist-renderer__accordion-header axm-delegated-transcript__tool-header\">\n <span class=\"axm-assist-renderer__accordion-header-title\">\n <i class=\"fa-light fa-people-group axm-assist-renderer__tool-title-icon\" aria-hidden=\"true\"></i>\n {{ resolveToolDisplayTitle(seg.content.command) }}\n </span>\n <span class=\"axm-assist-renderer__badge axm-assist-renderer__badge--primary\">{{\n '@conversation:chat.assist-renderer.badges.agent' | translate | async\n }}</span>\n </div>\n <div class=\"axm-assist-renderer__collapse-body\">\n <div class=\"axm-assist-renderer__tool-body\">\n <div class=\"axm-assist-renderer__tool-section-label\">\n {{ '@conversation:chat.assist-renderer.sections.agent-prompt' | translate | async }}\n </div>\n <div\n class=\"axm-assist-bot__segment\"\n [attr.dir]=\"segmentDir(delegatedPromptPreview(seg.content.arguments))\"\n >\n {{ delegatedPromptPreview(seg.content.arguments) }}\n </div>\n <div class=\"axm-assist-renderer__tool-section-label\">\n {{ '@conversation:chat.assist-renderer.sections.input' | translate | async }}\n </div>\n <div class=\"axm-assist-renderer__tool-editor-wrap\" style=\"direction: ltr\">\n <ax-code-editor\n [ngModel]=\"formatArgs(seg.content.arguments)\"\n [readonly]=\"true\"\n language=\"json\"\n [lineNumbers]=\"true\"\n class=\"axm-assist-renderer__tool-editor\"\n ></ax-code-editor>\n </div>\n @if (toolResultForCallId(seg.callId); as resultLine) {\n @let outcomeSegs = delegatedAgentOutcomeSegmentsForCall(resultLine);\n @if (outcomeSegs.length > 0) {\n <div class=\"axm-assist-renderer__tool-section-label\">\n {{ '@conversation:chat.assist-renderer.sections.agent-answer' | translate | async }}\n </div>\n @for (outSeg of outcomeSegs; track $index) {\n @switch (outSeg.type) {\n @case ('text') {\n @let parsedOut = parseAssistLineText(outSeg.content);\n @if (parsedOut.body.trim()) {\n <div\n class=\"axm-assist-bot__segment axm-assist-renderer__markdown\"\n [attr.dir]=\"segmentDir(parsedOut.body)\"\n >\n <axp-markdown-viewer [markdown]=\"parsedOut.body\" />\n </div>\n }\n }\n @case ('think') {\n <div\n class=\"axm-assist-renderer__thinking-body axm-assist-bot__segment\"\n [attr.dir]=\"segmentDir(outSeg.content)\"\n >\n {{ outSeg.content }}\n </div>\n }\n @case ('file') {\n <axm-assist-bot-file-line\n [parentMessage]=\"embedParent()\"\n [fileId]=\"outSeg.content.fileId\"\n />\n }\n @case ('node') {\n @if (axmAssistWidgetNodeFromUnknown(outSeg.content); as widgetNode) {\n <div class=\"axm-assist-bot__segment\" dir=\"auto\">\n <axm-chat-user-form-renderer\n [message]=\"\n syntheticNodeEmbedMessage(lineIndex, segIndex * 1000 + $index, outSeg.content)\n \"\n />\n </div>\n }\n }\n @case ('followUp') {\n <div class=\"axm-assist-bot__segment\" dir=\"auto\">\n <axm-assist-suggestion-chips [items]=\"outSeg.content\" />\n </div>\n }\n }\n }\n } @else {\n <div class=\"axm-assist-renderer__tool-section-label\">\n {{ '@conversation:chat.assist-renderer.sections.output' | translate | async }}\n </div>\n <div class=\"axm-assist-renderer__tool-editor-wrap\" style=\"direction: ltr\">\n <ax-code-editor\n [ngModel]=\"formatToolResultBody(resultLine)\"\n [readonly]=\"true\"\n language=\"json\"\n [lineNumbers]=\"true\"\n class=\"axm-assist-renderer__tool-editor\"\n ></ax-code-editor>\n </div>\n }\n }\n </div>\n </div>\n </div>\n } @else if (line.role === 'assistant' && (seg.type === 'agent' || seg.type === 'tool')) {\n <div\n class=\"axm-assist-renderer__tool-card axm-assist-renderer__collapse-shell axm-delegated-transcript__tool-block\"\n >\n <div class=\"axm-assist-renderer__accordion-header axm-delegated-transcript__tool-header\">\n <span class=\"axm-assist-renderer__accordion-header-title\">\n <i\n class=\"fa-light fa-screwdriver-wrench axm-assist-renderer__tool-title-icon\"\n aria-hidden=\"true\"\n ></i>\n {{ resolveToolDisplayTitle(seg.content.command) }}\n </span>\n <span class=\"axm-assist-renderer__badge axm-assist-renderer__badge--primary\">{{\n '@conversation:chat.assist-renderer.badges.tool' | translate | async\n }}</span>\n </div>\n <div class=\"axm-assist-renderer__collapse-body\">\n <div class=\"axm-assist-renderer__tool-body\">\n <div class=\"axm-assist-renderer__tool-section-label\">\n {{ '@conversation:chat.assist-renderer.sections.input' | translate | async }}\n </div>\n <div class=\"axm-assist-renderer__tool-editor-wrap\" style=\"direction: ltr\">\n <ax-code-editor\n [ngModel]=\"formatArgs(seg.content.arguments)\"\n [readonly]=\"true\"\n language=\"json\"\n [lineNumbers]=\"true\"\n class=\"axm-assist-renderer__tool-editor\"\n ></ax-code-editor>\n </div>\n @if (toolResultForCallId(seg.callId); as resultLine) {\n <div class=\"axm-assist-renderer__tool-section-label\">\n {{ '@conversation:chat.assist-renderer.sections.output' | translate | async }}\n </div>\n <div class=\"axm-assist-renderer__tool-editor-wrap\" style=\"direction: ltr\">\n <ax-code-editor\n [ngModel]=\"formatToolResultBody(resultLine)\"\n [readonly]=\"true\"\n language=\"json\"\n [lineNumbers]=\"true\"\n class=\"axm-assist-renderer__tool-editor\"\n ></ax-code-editor>\n </div>\n }\n </div>\n </div>\n </div>\n } @else if (line.role === 'assistant' && seg.type === 'node') {\n @if (axmAssistWidgetNodeFromUnknown(seg.content)) {\n <div class=\"axm-assist-bot__segment\" dir=\"auto\">\n <axm-chat-user-form-renderer\n [message]=\"syntheticNodeEmbedMessage(lineIndex, segIndex, seg.content)\"\n />\n </div>\n }\n } @else if (line.role === 'assistant' && seg.type === 'file') {\n <axm-assist-bot-file-line\n [parentMessage]=\"embedParent()\"\n [fileId]=\"seg.content.fileId\"\n />\n } @else if (line.role === 'tool' && (seg.type === 'tool_result' || seg.type === 'agent_result')) {\n <!-- Shown on the matching tool/agent block above -->\n } @else if (line.role === 'system' && seg.type === 'text') {\n <div class=\"axm-assist-bot__segment\" [attr.dir]=\"segmentDir(seg.content)\">\n <ax-conversation-text-renderer [message]=\"syntheticTextMessage(lineIndex, segIndex, seg.content)\" />\n </div>\n } @else {\n <div\n class=\"axm-assist-bot__fallback axm-assist-bot__segment\"\n [attr.dir]=\"segmentDir(formatFallbackSegment(seg))\"\n >\n {{ formatFallbackSegment(seg) }}\n </div>\n }\n }\n </div>\n </div>\n </div>\n }\n </div>\n </div>\n }\n</div>\n", styles: [".axm-assist-renderer{display:flex;flex-direction:column;gap:.25rem}.axm-assist-renderer axm-assist-suggestion-chips>div{padding:0;padding-top:1rem}.axm-assist-bot,.axm-assist-bot__final-line{display:flex;flex-direction:column;gap:.75rem}.axm-assist-bot__segment{unicode-bidi:isolate;font-size:.95rem;line-height:1.8;letter-spacing:.002em;color:rgb(var(--ax-sys-color-on-surface));text-wrap:pretty}.axm-assist-bot__line--user{align-self:flex-end}.axm-assist-bot__line--tool-role{align-self:stretch}.axm-assist-bot__tool-result{border-radius:.5rem;background:rgb(var(--ax-sys-color-lighter-surface));padding:.5rem .75rem}.axm-assist-bot__fallback{font-size:.88rem;line-height:1.75;word-break:break-word;opacity:.9}.axm-assist-renderer__cursor{display:inline-block;inline-size:6px;block-size:1em;margin-inline-start:2px;background:rgb(var(--ax-sys-color-primary-500));border-radius:1px;animation:axm-blink .8s steps(2) infinite;vertical-align:text-bottom}@keyframes axm-blink{0%{opacity:1}50%{opacity:0}}.axm-assist-renderer__stream-content{display:flex;flex-direction:column;gap:.5rem}.axm-assist-renderer__streaming-activity{display:flex;align-items:center;gap:.5rem;padding-block:.15rem}.axm-assist-renderer__activity-label{line-height:1.45}.axm-assist-renderer__text{white-space:pre-line;word-break:break-word;line-height:1.85;font-size:.95rem;letter-spacing:.002em;text-wrap:pretty}.axm-assist-bot__segment ax-conversation-text-renderer{display:block}.axm-assist-bot__segment ax-conversation-text-renderer :is(p,ul,ol),.axm-assist-renderer__markdown .axp-markdown-viewer__content :is(p,ul,ol){margin-block:.45rem}.axm-assist-bot__segment ax-conversation-text-renderer li,.axm-assist-renderer__markdown .axp-markdown-viewer__content li{line-height:1.8}.axm-assist-renderer__accordion-group{width:100%}.axm-assist-renderer__collapse-shell{border-radius:.625rem;overflow:hidden;background:rgb(var(--ax-sys-color-lighter-surface))}.axm-assist-renderer__collapse-body{margin:0;padding:0;border-radius:0 0 .5rem .5rem;background:transparent}.axm-assist-renderer__collapse-body>.axm-assist-renderer__agent-live-block--in-accordion{padding-inline:.5rem;padding-block-end:.35rem}.axm-assist-renderer__accordion-header{display:flex;align-items:center;justify-content:space-between;gap:.75rem;padding:.5rem .75rem;cursor:pointer;background:transparent;border:none;border-radius:.625rem .625rem 0 0;transition:background-color .15s ease}.axm-assist-renderer__collapse-shell>.axm-assist-renderer__accordion-header:hover{background:rgb(var(--ax-sys-color-light-surface))}.axm-assist-renderer__accordion-header-main{min-inline-size:0;display:flex;flex-direction:column;gap:.1rem}.axm-assist-renderer__accordion-header-title{font-size:.8125rem;line-height:1.25;font-weight:600;color:rgb(var(--ax-sys-color-on-surface));display:inline-flex;align-items:center;gap:.4rem}.axm-assist-renderer__header-trailing{flex-shrink:0;display:inline-flex;align-items:center;gap:.35rem}.axm-assist-renderer__delegated-agent-detail-link{padding:.25rem;text-decoration:underline;padding-top:0}.axm-assist-renderer__badge{flex-shrink:0;display:inline-flex;align-items:center;justify-content:center;max-width:min(100%,14rem);padding:.1875rem .65rem;border-radius:9999px;font-size:.6875rem;font-weight:600;line-height:1.3;letter-spacing:.03em;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.axm-assist-renderer__badge--warning{background:rgb(var(--ax-sys-color-warning-100))}.axm-assist-renderer__badge--primary{background:rgb(var(--ax-sys-color-primary-100))}.axm-assist-renderer__badge--success{background:rgb(var(--ax-sys-color-success-100))}.axm-assist-renderer__thinking-chevron{display:inline-block;font-size:.65rem;opacity:.65;transition:transform .2s ease;line-height:1;flex-shrink:0}.axm-assist-renderer__thinking-chevron--expanded{transform:rotate(180deg)}.axm-assist-renderer__thinking-body{padding:.625rem .75rem .75rem;font-size:.78rem;color:rgb(var(--ax-sys-color-neutral-700));word-break:break-word;line-height:1.55}.axm-assist-renderer__tools{display:flex;flex-direction:column;gap:.5rem}.axm-assist-renderer__tool-card{border-radius:.625rem;overflow:hidden}.axm-assist-renderer__tool-body{padding:.625rem .75rem .75rem;display:flex;flex-direction:column;gap:.35rem}.axm-assist-renderer__tool-section-label{font-size:.625rem;font-weight:600;text-transform:uppercase;letter-spacing:.06em;color:rgb(var(--ax-sys-color-neutral-700))}.axm-assist-renderer__tool-pre{margin:0;max-block-size:10rem;overflow:auto;border-radius:.375rem;background:rgb(var(--ax-sys-color-light-surface));padding:.5rem;font-family:var(--ax-font-mono, monospace);font-size:.675rem;line-height:1.45;word-break:break-word}.axm-assist-renderer__run-meta-wrap{margin-block-start:.45rem}.axm-assist-renderer__run-meta-header-sub{font-size:.7rem;line-height:1.35;color:rgb(var(--ax-sys-color-neutral-700));white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%}.axm-assist-renderer__run-meta{margin-block-start:.45rem;padding:.55rem .65rem .6rem;border-radius:.625rem;background:rgb(var(--ax-sys-color-lighter-surface));display:flex;flex-direction:column;gap:.45rem}.axm-assist-renderer__run-meta--panel{margin-block-start:0;padding:.45rem .5rem .55rem;background:transparent;border-radius:0}.axm-assist-renderer__run-meta-grid{display:flex;gap:.4rem}.axm-assist-renderer__meta-tile{min-width:0;padding:.4rem .5rem .45rem;border-radius:.45rem;background:rgb(var(--ax-sys-color-light-surface))}.axm-assist-renderer__meta-tile--wide{grid-column:1/-1}.axm-assist-renderer__meta-tile--accent{background:rgb(var(--ax-sys-color-primary-50))}.axm-assist-renderer__meta-tile-label{font-size:.6rem;font-weight:700;text-transform:uppercase;letter-spacing:.06em;color:rgb(var(--ax-sys-color-neutral-700));margin-block-end:.2rem}.axm-assist-renderer__meta-tile-value{font-size:.78rem;font-weight:600;line-height:1.35;color:rgb(var(--ax-sys-color-on-surface));word-break:break-word}.axm-assist-renderer__meta-tile-value--mono{font-variant-numeric:tabular-nums;font-feature-settings:\"tnum\" 1}.axm-assist-renderer__meta-tile-sub{margin-block-start:.15rem;font-size:.65rem;line-height:1.3;color:rgb(var(--ax-sys-color-neutral-700));font-family:var(--ax-font-mono, ui-monospace, monospace);word-break:break-all}.axm-assist-renderer__meta-tile-note{display:inline;margin-inline-start:.2rem;font-size:.65rem;font-weight:500;color:rgb(var(--ax-sys-color-success-700))}.axm-assist-renderer__tool-editor-wrap{border-radius:.375rem;overflow:hidden;background:rgb(var(--ax-sys-color-light-surface))}.axm-assist-renderer__waiting{display:flex;gap:.25rem;padding:.25rem 0}.axm-assist-renderer__dot{inline-size:6px;block-size:6px;border-radius:50%;background:rgb(var(--ax-sys-color-neutral-500));animation:axm-blink 1.2s ease-in-out infinite}.axm-assist-renderer__dot:nth-child(2){animation-delay:.2s}.axm-assist-renderer__dot:nth-child(3){animation-delay:.4s}.axm-assist-renderer__agent-live-block{border-radius:.75rem;background:rgb(var(--ax-sys-color-lighter-surface));padding:.75rem .875rem;display:flex;flex-direction:column;gap:.65rem;max-inline-size:min(42rem,100%)}.axm-assist-renderer__agent-live-block--in-accordion{background:rgb(var(--ax-sys-color-light-surface));border-radius:.5rem;padding:.5rem .55rem .55rem;max-inline-size:none}.axm-assist-renderer__agent-live-header{display:flex;align-items:center;flex-wrap:wrap;gap:.5rem}.axm-assist-renderer__agent-live-title{font-size:.8125rem;font-weight:600;color:rgb(var(--ax-sys-color-on-surface));flex:1;min-inline-size:0}.axm-assist-renderer__agent-live-prompt{font-size:.8125rem;line-height:1.55;word-break:break-word;padding:.5rem .75rem;border-radius:1.25rem;background:rgb(var(--ax-sys-color-lightest-surface));align-self:flex-end;max-inline-size:min(92%,36rem)}.axm-assist-renderer__agent-live-stream{font-size:.8125rem;line-height:1.55;white-space:pre-line;word-break:break-word;padding-block-start:.15rem}.axm-assist-renderer__agent-live-nested-tools{display:flex;flex-direction:column;gap:.35rem;padding-block-start:.35rem}.axm-assist-renderer__agent-live-nested-row{display:flex;align-items:center;gap:.45rem;font-size:.72rem}.axm-assist-renderer__agent-live-nested-name{font-family:var(--ax-font-mono, monospace);font-size:.7rem;flex:1;min-inline-size:0;overflow:hidden;text-overflow:ellipsis}.axm-assist-renderer__agent-live-nested-status{color:rgb(var(--ax-sys-color-neutral-600));flex-shrink:0}.axm-assist-renderer__retry-alert-body{display:flex;align-items:flex-start;gap:.75rem}.axm-assist-renderer__retry-alert-text{flex:1;min-inline-size:0;display:flex;flex-direction:column;gap:.3rem}.axm-assist-renderer__retry-description{margin:0;font-size:.8125rem;line-height:1.5;opacity:.92}.axm-assist-renderer__retry-error-detail{margin:.15rem 0 0;font-size:.75rem;line-height:1.45;font-family:var(--ax-font-mono, ui-monospace, monospace);word-break:break-word;opacity:.88}.axm-assist-renderer__retry-action{flex-shrink:0;align-self:center}\n", ".axm-delegated-transcript{padding:.5rem;display:flex;flex-direction:column;gap:.75rem;min-inline-size:0}.axm-delegated-transcript__empty{margin:0;padding:1rem;font-size:.875rem;color:rgb(var(--ax-sys-color-neutral-600));text-align:center}.axm-delegated-transcript__lines{max-block-size:min(75vh,42rem);overflow-y:auto;padding-inline-end:.25rem}.axm-delegated-transcript__line{display:flex;flex-direction:column;gap:.5rem;padding:.65rem .75rem;border-radius:.625rem;background:rgb(var(--ax-sys-color-lighter-surface))}.axm-delegated-transcript__role{display:flex;flex-wrap:wrap;align-items:center;gap:.35rem .65rem;font-size:.6875rem;font-weight:700;letter-spacing:.04em;text-transform:uppercase;color:rgb(var(--ax-sys-color-neutral-600));cursor:pointer;margin:0;padding:0;border:none;background:transparent;inline-size:100%;text-align:start}.axm-delegated-transcript__role .axm-assist-renderer__accordion-header-title{display:inline-flex;align-items:center;gap:.35rem;text-transform:uppercase}.axm-delegated-transcript__reflection-badge{padding:.125rem .45rem;border-radius:9999px;font-size:.625rem;font-weight:600;text-transform:none;letter-spacing:.02em;color:rgb(var(--ax-sys-color-on-warning-light-surface));background:rgb(var(--ax-sys-color-warning-100))}.axm-delegated-transcript__name{font-weight:500;text-transform:none;letter-spacing:normal;color:rgb(var(--ax-sys-color-neutral-500))}.axm-delegated-transcript__segments{display:flex;flex-direction:column;gap:.5rem}.axm-delegated-transcript__think{border-radius:.5rem;background:rgb(var(--ax-sys-color-light-surface));padding:.35rem .5rem}.axm-delegated-transcript__think-summary{display:flex;align-items:center;gap:.35rem;cursor:pointer;font-size:.8125rem;font-weight:600;color:rgb(var(--ax-sys-color-on-surface));list-style:none}.axm-delegated-transcript__think-summary::-webkit-details-marker{display:none}.axm-delegated-transcript__tool-block{margin-block:0}.axm-delegated-transcript__tool-header{cursor:default}\n"], dependencies: [{ kind: "component", type: AXTextRendererComponent, selector: "ax-conversation-text-renderer", inputs: ["message"] }, { kind: "component", type: AXMNodeMessageRendererComponent, selector: "axm-chat-user-form-renderer", inputs: ["message", "node"], outputs: ["formSubmitted"] }, { kind: "component", type: AXMAssistBotFileLineComponent, selector: "axm-assist-bot-file-line", inputs: ["parentMessage", "fileId"] }, { kind: "component", type: AXMAssistSuggestionChipsComponent, selector: "axm-assist-suggestion-chips", inputs: ["items"] }, { kind: "ngmodule", type: AXAccordionCdkModule }, { kind: "directive", type: i1.AXAccordionGroupDirective, selector: "[axAccordionGroup]", inputs: ["accordion", "activeIndex", "collapsedOnItemClick"], exportAs: ["axAccordionGroup"] }, { kind: "directive", type: i1.AXAccordionItemContentDirective, selector: "[axAccordionItemContent]", inputs: ["transition"], exportAs: ["axAccordionItemContent"] }, { kind: "directive", type: i1.AXAccordionItemHeaderDirective, selector: "[axAccordionItemHeader]", exportAs: ["axAccordionItemHeader"] }, { kind: "directive", type: i1.AXAccordionItemDirective, selector: "[axAccordionItem]", inputs: ["isCollapsed"], outputs: ["isCollapsedChange", "onClick"], exportAs: ["axAccordionItem"] }, { kind: "ngmodule", type: AXCodeEditorModule }, { kind: "component", type: i5.AXCodeEditorComponent, selector: "ax-code-editor", inputs: ["disabled", "value", "state", "name", "id", "language", "readonly", "placeholder", "lineNumbers", "lineWrapping", "tabSize", "indentWithTab", "theme", "extensions", "ariaLabel", "focusOnReady", "formatOnSave", "minRow", "customCompletions"], outputs: ["onValueChanged", "valueChange", "stateChange", "readonlyChange", "disabledChange", "ready", "save"] }, { kind: "component", type: AXPMarkdownViewerComponent, selector: "axp-markdown-viewer", inputs: ["markdown"] }, { kind: "directive", type: AXPMarkdownTemplateDirective, selector: "ng-template[axpMarkdownTemplate]", inputs: ["axpMarkdownTemplate"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "pipe", type: i1$2.AXTranslatorPipe, name: "translate" }, { kind: "pipe", type: AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
226
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.9", type: AXMAssistDelegatedAgentTranscriptViewComponent, isStandalone: true, selector: "axm-assist-delegated-agent-transcript-view", inputs: { messages: { classPropertyName: "messages", publicName: "messages", isSignal: true, isRequired: false, transformFunction: null }, embedParent: { classPropertyName: "embedParent", publicName: "embedParent", isSignal: true, isRequired: true, transformFunction: null }, emptyHint: { classPropertyName: "emptyHint", publicName: "emptyHint", isSignal: true, isRequired: false, transformFunction: null }, agentTitleById: { classPropertyName: "agentTitleById", publicName: "agentTitleById", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<div class=\"axm-delegated-transcript\">\n @if (!hasMessages() && emptyHint()) {\n <p class=\"axm-delegated-transcript__empty\">{{ emptyHint() }}</p>\n } @else {\n <div class=\"axm-assist-bot axm-delegated-transcript__lines\" role=\"list\">\n <div class=\"axm-assist-renderer__accordion-group\" axAccordionGroup [accordion]=\"false\">\n @for (item of displayLines(); track item.lineIndex) {\n @let line = item.line;\n @let lineIndex = item.lineIndex;\n <div\n class=\"axm-delegated-transcript__line axm-assist-bot__line axm-assist-renderer__collapse-shell\"\n axAccordionItem\n #roleSection=\"axAccordionItem\"\n role=\"listitem\"\n [class.axm-assist-bot__line--user]=\"line.role === 'user'\"\n [class.axm-assist-bot__line--tool-role]=\"line.role === 'tool'\"\n [attr.data-role]=\"line.role\"\n >\n <header\n class=\"axm-delegated-transcript__role axm-assist-renderer__accordion-header\"\n axAccordionItemHeader\n >\n <span class=\"axm-assist-renderer__accordion-header-main\">\n <span class=\"axm-assist-renderer__accordion-header-title\">\n <i\n class=\"fa-light fa-chevron-down axm-assist-renderer__thinking-chevron\"\n [class.axm-assist-renderer__thinking-chevron--expanded]=\"!roleSection.isCollapsed()\"\n aria-hidden=\"true\"\n ></i>\n <span>{{ roleTranslationKey(line.role) | translate | async }}</span>\n </span>\n @if (line.delegatedReflection) {\n <span class=\"axm-delegated-transcript__reflection-badge\">{{\n '@conversation:chat.assist-renderer.delegated-agent.reflection' | translate | async\n }}</span>\n }\n @if (line.name?.trim()) {\n <span class=\"axm-delegated-transcript__name\">{{ line.name }}</span>\n }\n </span>\n </header>\n\n <div axAccordionItemContent>\n <div class=\"axm-assist-renderer__collapse-body axm-delegated-transcript__segments\">\n @for (seg of line.responses; track segIndex; let segIndex = $index) {\n @if (line.role === 'user' && seg.type === 'file') {\n <axm-assist-bot-file-line\n [parentMessage]=\"embedParent()\"\n [fileId]=\"seg.content.fileId\"\n />\n } @else if (line.role === 'user' && seg.type === 'text') {\n <div class=\"axm-assist-bot__segment\" [attr.dir]=\"segmentDir(seg.content)\">\n <ax-conversation-text-renderer [message]=\"syntheticTextMessage(lineIndex, segIndex, seg.content)\" />\n </div>\n } @else if (line.role === 'assistant' && seg.type === 'think') {\n <details class=\"axm-delegated-transcript__think\" open>\n <summary class=\"axm-delegated-transcript__think-summary\">\n <i class=\"fa-light fa-brain axm-assist-renderer__tool-title-icon\" aria-hidden=\"true\"></i>\n {{ '@conversation:chat.assist-renderer.sections.thinking' | translate | async }}\n </summary>\n <div\n class=\"axm-assist-renderer__thinking-body axm-assist-bot__segment\"\n [attr.dir]=\"segmentDir(seg.content)\"\n >\n {{ seg.content }}\n </div>\n </details>\n } @else if (line.role === 'assistant' && seg.type === 'text') {\n @let parsedLine = parseAssistLineText(seg.content);\n @if (parsedLine.thinking?.trim()) {\n <details class=\"axm-delegated-transcript__think\" open>\n <summary class=\"axm-delegated-transcript__think-summary\">\n <i class=\"fa-light fa-brain axm-assist-renderer__tool-title-icon\" aria-hidden=\"true\"></i>\n {{ '@conversation:chat.assist-renderer.sections.thinking' | translate | async }}\n </summary>\n <div\n class=\"axm-assist-renderer__thinking-body axm-assist-bot__segment\"\n [attr.dir]=\"segmentDir(parsedLine.thinking ?? '')\"\n >\n {{ parsedLine.thinking }}\n </div>\n </details>\n }\n @if (parsedLine.body.trim()) {\n <div\n class=\"axm-assist-bot__segment axm-assist-renderer__markdown\"\n [attr.dir]=\"segmentDir(parsedLine.body)\"\n >\n <axp-markdown-viewer [markdown]=\"parsedLine.body\">\n <ng-template axpMarkdownTemplate=\"code\" let-segment>\n <div class=\"axm-assist-renderer__tool-editor-wrap\" style=\"direction: ltr\">\n <ax-code-editor\n [ngModel]=\"markdownCodeValue(segment)\"\n [readonly]=\"true\"\n [language]=\"markdownCodeLanguage(segment)\"\n [lineNumbers]=\"true\"\n class=\"axm-assist-renderer__tool-editor\"\n ></ax-code-editor>\n </div>\n </ng-template>\n </axp-markdown-viewer>\n </div>\n }\n } @else if (\n line.role === 'assistant' &&\n (seg.type === 'agent' || seg.type === 'tool') &&\n isDelegatedAgentCommand(seg.content.command)\n ) {\n <div\n class=\"axm-assist-renderer__tool-card axm-assist-renderer__collapse-shell axm-delegated-transcript__tool-block\"\n >\n <div class=\"axm-assist-renderer__accordion-header axm-delegated-transcript__tool-header\">\n <span class=\"axm-assist-renderer__accordion-header-title\">\n <i class=\"fa-light fa-people-group axm-assist-renderer__tool-title-icon\" aria-hidden=\"true\"></i>\n {{ resolveToolDisplayTitle(seg.content.command) }}\n </span>\n <span class=\"axm-assist-renderer__badge axm-assist-renderer__badge--primary\">{{\n '@conversation:chat.assist-renderer.badges.agent' | translate | async\n }}</span>\n </div>\n <div class=\"axm-assist-renderer__collapse-body\">\n <div class=\"axm-assist-renderer__tool-body\">\n <div class=\"axm-assist-renderer__tool-section-label\">\n {{ '@conversation:chat.assist-renderer.sections.agent-prompt' | translate | async }}\n </div>\n <div\n class=\"axm-assist-bot__segment\"\n [attr.dir]=\"segmentDir(delegatedPromptPreview(seg.content.arguments))\"\n >\n {{ delegatedPromptPreview(seg.content.arguments) }}\n </div>\n <div class=\"axm-assist-renderer__tool-section-label\">\n {{ '@conversation:chat.assist-renderer.sections.input' | translate | async }}\n </div>\n <div class=\"axm-assist-renderer__tool-editor-wrap\" style=\"direction: ltr\">\n <ax-code-editor\n [ngModel]=\"formatArgs(seg.content.arguments)\"\n [readonly]=\"true\"\n language=\"json\"\n [lineNumbers]=\"true\"\n class=\"axm-assist-renderer__tool-editor\"\n ></ax-code-editor>\n </div>\n @if (toolResultForCallId(seg.callId); as resultLine) {\n @let outcomeSegs = delegatedAgentOutcomeSegmentsForCall(resultLine);\n @if (outcomeSegs.length > 0) {\n <div class=\"axm-assist-renderer__tool-section-label\">\n {{ '@conversation:chat.assist-renderer.sections.agent-answer' | translate | async }}\n </div>\n @for (outSeg of outcomeSegs; track $index) {\n @switch (outSeg.type) {\n @case ('text') {\n @let parsedOut = parseAssistLineText(outSeg.content);\n @if (parsedOut.body.trim()) {\n <div\n class=\"axm-assist-bot__segment axm-assist-renderer__markdown\"\n [attr.dir]=\"segmentDir(parsedOut.body)\"\n >\n <axp-markdown-viewer [markdown]=\"parsedOut.body\" />\n </div>\n }\n }\n @case ('think') {\n <div\n class=\"axm-assist-renderer__thinking-body axm-assist-bot__segment\"\n [attr.dir]=\"segmentDir(outSeg.content)\"\n >\n {{ outSeg.content }}\n </div>\n }\n @case ('file') {\n <axm-assist-bot-file-line\n [parentMessage]=\"embedParent()\"\n [fileId]=\"outSeg.content.fileId\"\n />\n }\n @case ('node') {\n @if (axmAssistWidgetNodeFromUnknown(outSeg.content); as widgetNode) {\n <div class=\"axm-assist-bot__segment\" dir=\"auto\">\n <axm-chat-user-form-renderer\n [message]=\"\n syntheticNodeEmbedMessage(lineIndex, segIndex * 1000 + $index, outSeg.content)\n \"\n />\n </div>\n }\n }\n @case ('followUp') {\n <div class=\"axm-assist-bot__segment\" dir=\"auto\">\n <axm-assist-suggestion-chips [items]=\"outSeg.content\" />\n </div>\n }\n }\n }\n } @else {\n <div class=\"axm-assist-renderer__tool-section-label\">\n {{ '@conversation:chat.assist-renderer.sections.output' | translate | async }}\n </div>\n <div class=\"axm-assist-renderer__tool-editor-wrap\" style=\"direction: ltr\">\n <ax-code-editor\n [ngModel]=\"formatToolResultBody(resultLine)\"\n [readonly]=\"true\"\n language=\"json\"\n [lineNumbers]=\"true\"\n class=\"axm-assist-renderer__tool-editor\"\n ></ax-code-editor>\n </div>\n }\n }\n </div>\n </div>\n </div>\n } @else if (line.role === 'assistant' && (seg.type === 'agent' || seg.type === 'tool')) {\n <div\n class=\"axm-assist-renderer__tool-card axm-assist-renderer__collapse-shell axm-delegated-transcript__tool-block\"\n >\n <div class=\"axm-assist-renderer__accordion-header axm-delegated-transcript__tool-header\">\n <span class=\"axm-assist-renderer__accordion-header-title\">\n <i\n class=\"fa-light fa-screwdriver-wrench axm-assist-renderer__tool-title-icon\"\n aria-hidden=\"true\"\n ></i>\n {{ resolveToolDisplayTitle(seg.content.command) }}\n </span>\n <span class=\"axm-assist-renderer__badge axm-assist-renderer__badge--primary\">{{\n '@conversation:chat.assist-renderer.badges.tool' | translate | async\n }}</span>\n </div>\n <div class=\"axm-assist-renderer__collapse-body\">\n <div class=\"axm-assist-renderer__tool-body\">\n <div class=\"axm-assist-renderer__tool-section-label\">\n {{ '@conversation:chat.assist-renderer.sections.input' | translate | async }}\n </div>\n <div class=\"axm-assist-renderer__tool-editor-wrap\" style=\"direction: ltr\">\n <ax-code-editor\n [ngModel]=\"formatArgs(seg.content.arguments)\"\n [readonly]=\"true\"\n language=\"json\"\n [lineNumbers]=\"true\"\n class=\"axm-assist-renderer__tool-editor\"\n ></ax-code-editor>\n </div>\n @if (toolResultForCallId(seg.callId); as resultLine) {\n <div class=\"axm-assist-renderer__tool-section-label\">\n {{ '@conversation:chat.assist-renderer.sections.output' | translate | async }}\n </div>\n <div class=\"axm-assist-renderer__tool-editor-wrap\" style=\"direction: ltr\">\n <ax-code-editor\n [ngModel]=\"formatToolResultBody(resultLine)\"\n [readonly]=\"true\"\n language=\"json\"\n [lineNumbers]=\"true\"\n class=\"axm-assist-renderer__tool-editor\"\n ></ax-code-editor>\n </div>\n }\n </div>\n </div>\n </div>\n } @else if (line.role === 'assistant' && seg.type === 'node') {\n @if (axmAssistWidgetNodeFromUnknown(seg.content)) {\n <div class=\"axm-assist-bot__segment\" dir=\"auto\">\n <axm-chat-user-form-renderer\n [message]=\"syntheticNodeEmbedMessage(lineIndex, segIndex, seg.content)\"\n />\n </div>\n }\n } @else if (line.role === 'assistant' && seg.type === 'file') {\n <axm-assist-bot-file-line\n [parentMessage]=\"embedParent()\"\n [fileId]=\"seg.content.fileId\"\n />\n } @else if (line.role === 'tool' && (seg.type === 'tool_result' || seg.type === 'agent_result')) {\n <!-- Shown on the matching tool/agent block above -->\n } @else if (line.role === 'system' && seg.type === 'text') {\n <div class=\"axm-assist-bot__segment\" [attr.dir]=\"segmentDir(seg.content)\">\n <ax-conversation-text-renderer [message]=\"syntheticTextMessage(lineIndex, segIndex, seg.content)\" />\n </div>\n } @else {\n <div\n class=\"axm-assist-bot__fallback axm-assist-bot__segment\"\n [attr.dir]=\"segmentDir(formatFallbackSegment(seg))\"\n >\n {{ formatFallbackSegment(seg) }}\n </div>\n }\n }\n </div>\n </div>\n </div>\n }\n </div>\n </div>\n }\n</div>\n", styles: [".axm-assist-renderer{display:flex;flex-direction:column;gap:.25rem}.axm-assist-renderer axm-assist-suggestion-chips>div{padding:0;padding-top:1rem}.axm-assist-bot,.axm-assist-bot__final-line{display:flex;flex-direction:column;gap:.75rem}.axm-assist-bot__segment{unicode-bidi:isolate;font-size:.95rem;line-height:1.8;letter-spacing:.002em;color:rgb(var(--ax-sys-color-on-surface));text-wrap:pretty}.axm-assist-bot__line--user{align-self:flex-end}.axm-assist-bot__line--tool-role{align-self:stretch}.axm-assist-bot__tool-result{border-radius:.5rem;background:rgb(var(--ax-sys-color-lighter-surface));padding:.5rem .75rem}.axm-assist-bot__fallback{font-size:.88rem;line-height:1.75;word-break:break-word;opacity:.9}.axm-assist-renderer__cursor{display:inline-block;inline-size:6px;block-size:1em;margin-inline-start:2px;background:rgb(var(--ax-sys-color-primary-500));border-radius:1px;animation:axm-blink .8s steps(2) infinite;vertical-align:text-bottom}@keyframes axm-blink{0%{opacity:1}50%{opacity:0}}.axm-assist-renderer__stream-content{display:flex;flex-direction:column;gap:.5rem}.axm-assist-renderer__streaming-activity{display:flex;align-items:center;gap:.5rem;padding-block:.15rem}.axm-assist-renderer__activity-label{line-height:1.45}.axm-assist-renderer__text{white-space:pre-line;word-break:break-word;line-height:1.85;font-size:.95rem;letter-spacing:.002em;text-wrap:pretty}.axm-assist-bot__segment ax-conversation-text-renderer{display:block}.axm-assist-bot__segment ax-conversation-text-renderer :is(p,ul,ol),.axm-assist-renderer__markdown .axp-markdown-viewer__content :is(p,ul,ol){margin-block:.45rem}.axm-assist-bot__segment ax-conversation-text-renderer li,.axm-assist-renderer__markdown .axp-markdown-viewer__content li{line-height:1.8}.axm-assist-renderer__accordion-group{width:100%}.axm-assist-renderer__collapse-shell{border-radius:.625rem;overflow:hidden;background:rgb(var(--ax-sys-color-lighter-surface))}.axm-assist-renderer__collapse-body{margin:0;padding:0;border-radius:0 0 .5rem .5rem;background:transparent}.axm-assist-renderer__collapse-body>.axm-assist-renderer__agent-live-block--in-accordion{padding-inline:.5rem;padding-block-end:.35rem}.axm-assist-renderer__accordion-header{display:flex;align-items:center;justify-content:space-between;gap:.75rem;padding:.5rem .75rem;cursor:pointer;background:transparent;border:none;border-radius:.625rem .625rem 0 0;transition:background-color .15s ease}.axm-assist-renderer__collapse-shell>.axm-assist-renderer__accordion-header:hover{background:rgb(var(--ax-sys-color-light-surface))}.axm-assist-renderer__accordion-header-main{min-inline-size:0;display:flex;flex-direction:column;gap:.1rem}.axm-assist-renderer__accordion-header-title{font-size:.8125rem;line-height:1.25;font-weight:600;color:rgb(var(--ax-sys-color-on-surface));display:inline-flex;align-items:center;gap:.4rem}.axm-assist-renderer__header-trailing{flex-shrink:0;display:inline-flex;align-items:center;gap:.35rem}.axm-assist-renderer__delegated-agent-detail-link{padding:.25rem;text-decoration:underline;padding-top:0}.axm-assist-renderer__badge{flex-shrink:0;display:inline-flex;align-items:center;justify-content:center;max-width:min(100%,14rem);padding:.1875rem .65rem;border-radius:9999px;font-size:.6875rem;font-weight:600;line-height:1.3;letter-spacing:.03em;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.axm-assist-renderer__badge--warning{background:rgb(var(--ax-sys-color-warning-100))}.axm-assist-renderer__badge--primary{background:rgb(var(--ax-sys-color-primary-100))}.axm-assist-renderer__badge--success{background:rgb(var(--ax-sys-color-success-100))}.axm-assist-renderer__thinking-chevron{display:inline-block;font-size:.65rem;opacity:.65;transition:transform .2s ease;line-height:1;flex-shrink:0}.axm-assist-renderer__thinking-chevron--expanded{transform:rotate(180deg)}.axm-assist-renderer__thinking-body{padding:.625rem .75rem .75rem;font-size:.78rem;color:rgb(var(--ax-sys-color-neutral-700));word-break:break-word;line-height:1.55}.axm-assist-renderer__tools{display:flex;flex-direction:column;gap:.5rem}.axm-assist-renderer__tool-card{border-radius:.625rem;overflow:hidden}.axm-assist-renderer__tool-body{padding:.625rem .75rem .75rem;display:flex;flex-direction:column;gap:.35rem}.axm-assist-renderer__tool-section-label{font-size:.625rem;font-weight:600;text-transform:uppercase;letter-spacing:.06em;color:rgb(var(--ax-sys-color-neutral-700))}.axm-assist-renderer__tool-pre{margin:0;max-block-size:10rem;overflow:auto;border-radius:.375rem;background:rgb(var(--ax-sys-color-light-surface));padding:.5rem;font-family:var(--ax-font-mono, monospace);font-size:.675rem;line-height:1.45;word-break:break-word}.axm-assist-renderer__run-meta-wrap{margin-block-start:.45rem}.axm-assist-renderer__run-meta-header-sub{font-size:.7rem;line-height:1.35;color:rgb(var(--ax-sys-color-neutral-700));white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%}.axm-assist-renderer__run-meta{margin-block-start:.45rem;padding:.55rem .65rem .6rem;border-radius:.625rem;background:rgb(var(--ax-sys-color-lighter-surface));display:flex;flex-direction:column;gap:.45rem}.axm-assist-renderer__run-meta--panel{margin-block-start:0;padding:.45rem .5rem .55rem;background:transparent;border-radius:0}.axm-assist-renderer__run-meta-grid{display:flex;gap:.4rem}.axm-assist-renderer__meta-tile{min-width:0;padding:.4rem .5rem .45rem;border-radius:.45rem;background:rgb(var(--ax-sys-color-light-surface))}.axm-assist-renderer__meta-tile--wide{grid-column:1/-1}.axm-assist-renderer__meta-tile--accent{background:rgb(var(--ax-sys-color-primary-50))}.axm-assist-renderer__meta-tile-label{font-size:.6rem;font-weight:700;text-transform:uppercase;letter-spacing:.06em;color:rgb(var(--ax-sys-color-neutral-700));margin-block-end:.2rem}.axm-assist-renderer__meta-tile-value{font-size:.78rem;font-weight:600;line-height:1.35;color:rgb(var(--ax-sys-color-on-surface));word-break:break-word}.axm-assist-renderer__meta-tile-value--mono{font-variant-numeric:tabular-nums;font-feature-settings:\"tnum\" 1}.axm-assist-renderer__meta-tile-sub{margin-block-start:.15rem;font-size:.65rem;line-height:1.3;color:rgb(var(--ax-sys-color-neutral-700));font-family:var(--ax-font-mono, ui-monospace, monospace);word-break:break-all}.axm-assist-renderer__meta-tile-note{display:inline;margin-inline-start:.2rem;font-size:.65rem;font-weight:500;color:rgb(var(--ax-sys-color-success-700))}.axm-assist-renderer__tool-editor-wrap{border-radius:.375rem;overflow:hidden;background:rgb(var(--ax-sys-color-light-surface))}.axm-assist-renderer__waiting{display:flex;gap:.25rem;padding:.25rem 0}.axm-assist-renderer__dot{inline-size:6px;block-size:6px;border-radius:50%;background:rgb(var(--ax-sys-color-neutral-500));animation:axm-blink 1.2s ease-in-out infinite}.axm-assist-renderer__dot:nth-child(2){animation-delay:.2s}.axm-assist-renderer__dot:nth-child(3){animation-delay:.4s}.axm-assist-renderer__agent-live-block{border-radius:.75rem;background:rgb(var(--ax-sys-color-lighter-surface));padding:.75rem .875rem;display:flex;flex-direction:column;gap:.65rem;max-inline-size:min(42rem,100%)}.axm-assist-renderer__agent-live-block--in-accordion{background:rgb(var(--ax-sys-color-light-surface));border-radius:.5rem;padding:.5rem .55rem .55rem;max-inline-size:none}.axm-assist-renderer__agent-live-header{display:flex;align-items:center;flex-wrap:wrap;gap:.5rem}.axm-assist-renderer__agent-live-title{font-size:.8125rem;font-weight:600;color:rgb(var(--ax-sys-color-on-surface));flex:1;min-inline-size:0}.axm-assist-renderer__agent-live-prompt{font-size:.8125rem;line-height:1.55;word-break:break-word;padding:.5rem .75rem;border-radius:1.25rem;background:rgb(var(--ax-sys-color-lightest-surface));align-self:flex-end;max-inline-size:min(92%,36rem)}.axm-assist-renderer__agent-live-stream{font-size:.8125rem;line-height:1.55;white-space:pre-line;word-break:break-word;padding-block-start:.15rem}.axm-assist-renderer__agent-live-nested-tools{display:flex;flex-direction:column;gap:.35rem;padding-block-start:.35rem}.axm-assist-renderer__agent-live-nested-row{display:flex;align-items:center;gap:.45rem;font-size:.72rem}.axm-assist-renderer__agent-live-nested-name{font-family:var(--ax-font-mono, monospace);font-size:.7rem;flex:1;min-inline-size:0;overflow:hidden;text-overflow:ellipsis}.axm-assist-renderer__agent-live-nested-status{color:rgb(var(--ax-sys-color-neutral-600));flex-shrink:0}.axm-assist-renderer__retry-alert-body{display:flex;align-items:flex-start;gap:.75rem}.axm-assist-renderer__retry-alert-text{flex:1;min-inline-size:0;display:flex;flex-direction:column;gap:.3rem}.axm-assist-renderer__retry-description{margin:0;font-size:.8125rem;line-height:1.5;opacity:.92}.axm-assist-renderer__retry-error-detail{margin:.15rem 0 0;font-size:.75rem;line-height:1.45;font-family:var(--ax-font-mono, ui-monospace, monospace);word-break:break-word;opacity:.88}.axm-assist-renderer__retry-action{flex-shrink:0;align-self:center}\n", ".axm-delegated-transcript{padding:.5rem;display:flex;flex-direction:column;gap:.75rem;min-inline-size:0}.axm-delegated-transcript__empty{margin:0;padding:1rem;font-size:.875rem;color:rgb(var(--ax-sys-color-neutral-600));text-align:center}.axm-delegated-transcript__lines{max-block-size:min(75vh,42rem);overflow-y:auto;padding-inline-end:.25rem}.axm-delegated-transcript__line{display:flex;flex-direction:column;gap:.5rem;padding:.65rem .75rem;border-radius:.625rem;background:rgb(var(--ax-sys-color-lighter-surface))}.axm-delegated-transcript__role{display:flex;flex-wrap:wrap;align-items:center;gap:.35rem .65rem;font-size:.6875rem;font-weight:700;letter-spacing:.04em;text-transform:uppercase;color:rgb(var(--ax-sys-color-neutral-600));cursor:pointer;margin:0;padding:0;border:none;background:transparent;inline-size:100%;text-align:start}.axm-delegated-transcript__role .axm-assist-renderer__accordion-header-title{display:inline-flex;align-items:center;gap:.35rem;text-transform:uppercase}.axm-delegated-transcript__reflection-badge{padding:.125rem .45rem;border-radius:9999px;font-size:.625rem;font-weight:600;text-transform:none;letter-spacing:.02em;color:rgb(var(--ax-sys-color-on-warning-light-surface));background:rgb(var(--ax-sys-color-warning-100))}.axm-delegated-transcript__name{font-weight:500;text-transform:none;letter-spacing:normal;color:rgb(var(--ax-sys-color-neutral-500))}.axm-delegated-transcript__segments{display:flex;flex-direction:column;gap:.5rem}.axm-delegated-transcript__think{border-radius:.5rem;background:rgb(var(--ax-sys-color-light-surface));padding:.35rem .5rem}.axm-delegated-transcript__think-summary{display:flex;align-items:center;gap:.35rem;cursor:pointer;font-size:.8125rem;font-weight:600;color:rgb(var(--ax-sys-color-on-surface));list-style:none}.axm-delegated-transcript__think-summary::-webkit-details-marker{display:none}.axm-delegated-transcript__tool-block{margin-block:0}.axm-delegated-transcript__tool-header{cursor:default}\n"], dependencies: [{ kind: "component", type: AXTextRendererComponent, selector: "ax-conversation-text-renderer", inputs: ["message"] }, { kind: "component", type: AXMNodeMessageRendererComponent, selector: "axm-chat-user-form-renderer", inputs: ["message", "node"], outputs: ["formSubmitted"] }, { kind: "component", type: AXMAssistBotFileLineComponent, selector: "axm-assist-bot-file-line", inputs: ["parentMessage", "fileId"] }, { kind: "component", type: AXMAssistSuggestionChipsComponent, selector: "axm-assist-suggestion-chips", inputs: ["items", "sendInPlace"], outputs: ["conversationCreated"] }, { kind: "ngmodule", type: AXAccordionCdkModule }, { kind: "directive", type: i1.AXAccordionGroupDirective, selector: "[axAccordionGroup]", inputs: ["accordion", "activeIndex", "collapsedOnItemClick"], exportAs: ["axAccordionGroup"] }, { kind: "directive", type: i1.AXAccordionItemContentDirective, selector: "[axAccordionItemContent]", inputs: ["transition"], exportAs: ["axAccordionItemContent"] }, { kind: "directive", type: i1.AXAccordionItemHeaderDirective, selector: "[axAccordionItemHeader]", exportAs: ["axAccordionItemHeader"] }, { kind: "directive", type: i1.AXAccordionItemDirective, selector: "[axAccordionItem]", inputs: ["isCollapsed"], outputs: ["isCollapsedChange", "onClick"], exportAs: ["axAccordionItem"] }, { kind: "ngmodule", type: AXCodeEditorModule }, { kind: "component", type: i5.AXCodeEditorComponent, selector: "ax-code-editor", inputs: ["disabled", "value", "state", "name", "id", "language", "readonly", "placeholder", "lineNumbers", "lineWrapping", "tabSize", "indentWithTab", "theme", "extensions", "ariaLabel", "focusOnReady", "formatOnSave", "minRow", "customCompletions"], outputs: ["onValueChanged", "valueChange", "stateChange", "readonlyChange", "disabledChange", "ready", "save"] }, { kind: "component", type: AXPMarkdownViewerComponent, selector: "axp-markdown-viewer", inputs: ["markdown"] }, { kind: "directive", type: AXPMarkdownTemplateDirective, selector: "ng-template[axpMarkdownTemplate]", inputs: ["axpMarkdownTemplate"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "pipe", type: i1$2.AXTranslatorPipe, name: "translate" }, { kind: "pipe", type: AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
227
227
  }
228
228
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXMAssistDelegatedAgentTranscriptViewComponent, decorators: [{
229
229
  type: Component,
@@ -326,4 +326,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
326
326
  }] });
327
327
 
328
328
  export { AXMAssistDelegatedAgentDetailPopupComponent };
329
- //# sourceMappingURL=acorex-modules-conversation-assist-delegated-agent-detail-popup.component-BCkJEAmX.mjs.map
329
+ //# sourceMappingURL=acorex-modules-conversation-assist-delegated-agent-detail-popup.component-Dyx_n0bi.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"acorex-modules-conversation-assist-delegated-agent-detail-popup.component-BCkJEAmX.mjs","sources":["../../../../libs/modules/conversation/src/lib/features/chat/plugins/utils/assist-delegated-agent-detail-export.util.ts","../../../../libs/modules/conversation/src/lib/features/chat/plugins/utils/assist-delegated-agent-transcript-view.util.ts","../../../../libs/modules/conversation/src/lib/features/chat/plugins/message-renderers/assist-delegated-agent-transcript-view.component.ts","../../../../libs/modules/conversation/src/lib/features/chat/plugins/message-renderers/assist-delegated-agent-transcript-view.component.html","../../../../libs/modules/conversation/src/lib/features/chat/plugins/message-renderers/assist-delegated-agent-detail-popup.component.ts"],"sourcesContent":["//#region ---- Imports ----\n\nimport type {\n AXPAiChatMessage,\n AXPAiDelegatedAgentTranscriptRunInput,\n} from '@acorex/modules/ai-management';\n\nimport { axmDownloadDebugJson, axmSanitizeDebugFilenamePart } from './assist-debug-information.util';\n\n//#endregion\n\n//#region ---- Types ----\n\n/** JSON shape for delegated specialist detail download. */\nexport interface AXMAssistDelegatedAgentDetailExport {\n exportedAt: string;\n delegationCallId: string;\n agentName?: string;\n runInput?: AXPAiDelegatedAgentTranscriptRunInput;\n messages: AXPAiChatMessage[];\n}\n\n//#endregion\n\n//#region ---- Export ----\n\nexport function axmFormatDelegatedAgentDetailExportJson(\n delegationCallId: string,\n messages: AXPAiChatMessage[],\n runInput?: AXPAiDelegatedAgentTranscriptRunInput,\n agentName?: string,\n): string {\n const snapshot: AXMAssistDelegatedAgentDetailExport = {\n exportedAt: new Date().toISOString(),\n delegationCallId: delegationCallId.trim(),\n ...(agentName?.trim() ? { agentName: agentName.trim() } : {}),\n ...(runInput ? { runInput } : {}),\n messages,\n };\n return JSON.stringify(snapshot, null, 2);\n}\n\nexport function axmDownloadDelegatedAgentDetailJson(\n delegationCallId: string,\n messages: AXPAiChatMessage[],\n runInput?: AXPAiDelegatedAgentTranscriptRunInput,\n agentName?: string,\n): void {\n const text = axmFormatDelegatedAgentDetailExportJson(delegationCallId, messages, runInput, agentName);\n const filename = `assist-delegated-agent-${axmSanitizeDebugFilenamePart(delegationCallId)}.json`;\n axmDownloadDebugJson(filename, text);\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport type { AXMessage } from '@acorex/components/conversation2';\nimport type { AXPAiChatMessage } from '@acorex/modules/ai-management';\n\n//#endregion\n\n//#region ---- Tool result index ----\n\n/** Maps tool_call id → tool-role line carrying {@code tool_result} / {@code agent_result}. */\nexport function axmBuildToolResultByCallId(messages: AXPAiChatMessage[]): Map<string, AXPAiChatMessage> {\n const map = new Map<string, AXPAiChatMessage>();\n for (const line of messages) {\n if (line.role !== 'tool') {\n continue;\n }\n for (const seg of line.responses) {\n if (seg.type !== 'tool_result' && seg.type !== 'agent_result') {\n continue;\n }\n const callId = seg.callId?.trim();\n if (callId) {\n map.set(callId, line);\n }\n }\n }\n return map;\n}\n\n//#endregion\n\n//#region ---- Formatters ----\n\nexport function axmTryPrettyJson(raw: string): string {\n const trimmed = raw.trim();\n if (!trimmed) {\n return '';\n }\n try {\n return JSON.stringify(JSON.parse(trimmed), null, 2);\n } catch {\n return trimmed;\n }\n}\n\nexport function axmFormatTranscriptArgs(args: unknown): string {\n if (args == null) {\n return '';\n }\n if (typeof args === 'string') {\n return axmTryPrettyJson(args);\n }\n try {\n return JSON.stringify(args, null, 2);\n } catch {\n return String(args);\n }\n}\n\nexport function axmFormatTranscriptFallbackSegment(seg: unknown): string {\n try {\n return JSON.stringify(seg, null, 2);\n } catch {\n return String(seg);\n }\n}\n\n//#endregion\n\n//#region ---- Embed parent stub ----\n\n/** Minimal parent message for synthetic embed renderers inside the detail popup. */\nexport function axmDelegatedTranscriptEmbedParentStub(): AXMessage {\n return {\n id: 'assist-delegated-transcript-embed',\n conversationId: '',\n senderId: 'assist',\n type: 'text',\n payload: { type: 'text', text: '' },\n status: 'sent',\n metadata: { assistEmbed: true },\n } as unknown as AXMessage;\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { AXAccordionCdkModule } from '@acorex/cdk/accordion';\nimport { AXCodeEditorDefaultLanguage, AXCodeEditorModule } from '@acorex/components/code-editor';\nimport type { AXMessage, AXMessagePayload } from '@acorex/components/conversation2';\nimport { AXTextRendererComponent } from '@acorex/components/conversation2';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport type {\n AXPAiChatMessage,\n AXPAiChatResponse,\n AXPAiDelegatedAgentResultSegment,\n} from '@acorex/modules/ai-management';\nimport {\n axpAiChatToolOrAgentResultBodyJson,\n axpAiDelegatedAgentPromptPreview,\n axpAiDelegatedAgentResultSegments,\n axpAiParseSupervisorAgentToolName,\n} from '@acorex/modules/ai-management';\nimport { AXPMarkdownTemplateDirective, AXPMarkdownViewerComponent } from '@acorex/platform/layout/components';\nimport { AsyncPipe } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, computed, input, ViewEncapsulation } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\n\nimport {\n axmAssistWidgetNodeFromUnknown,\n axmParseAssistTranscriptTextEnvelope,\n axmSyntheticEmbedMessage,\n} from '../utils/assist-bot-transcript.util';\nimport {\n axmBuildToolResultByCallId,\n axmFormatTranscriptArgs,\n axmFormatTranscriptFallbackSegment,\n axmTryPrettyJson,\n} from '../utils/assist-delegated-agent-transcript-view.util';\nimport { axmAssistSegmentDirection } from '../utils/assist-segment-direction.util';\nimport { AXMAssistBotFileLineComponent } from './assist-bot-file-line.component';\nimport { AXMAssistSuggestionChipsComponent } from '../shared/assist-suggestion-chips.component';\nimport { AXMNodeMessageRendererComponent } from './node-message-renderer.component';\n\n//#endregion\n\n//#region ---- Component ----\n\n/**\n * Read-only {@link AXPAiChatMessage} transcript (role + responses[]) for delegated specialist detail.\n */\n@Component({\n selector: 'axm-assist-delegated-agent-transcript-view',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [\n AXTextRendererComponent,\n AXMNodeMessageRendererComponent,\n AXMAssistBotFileLineComponent,\n AXMAssistSuggestionChipsComponent,\n AXAccordionCdkModule,\n AXCodeEditorModule,\n AXPMarkdownViewerComponent,\n AXPMarkdownTemplateDirective,\n FormsModule,\n AXTranslationModule,\n AsyncPipe,\n ],\n templateUrl: './assist-delegated-agent-transcript-view.component.html',\n styleUrls: [\n './assist-message-renderer.component.scss',\n './assist-delegated-agent-transcript-view.component.scss',\n ],\n})\nexport class AXMAssistDelegatedAgentTranscriptViewComponent {\n //#region ---- Inputs ----\n\n readonly messages = input<AXPAiChatMessage[]>([]);\n readonly embedParent = input.required<AXMessage>();\n readonly emptyHint = input<string | undefined>(undefined);\n readonly agentTitleById = input<Record<string, string>>({});\n\n //#endregion\n\n //#region ---- Template helpers ----\n\n protected readonly segmentDir = axmAssistSegmentDirection;\n protected readonly parseAssistLineText = axmParseAssistTranscriptTextEnvelope;\n protected readonly axmAssistWidgetNodeFromUnknown = axmAssistWidgetNodeFromUnknown;\n protected readonly isDelegatedAgentCommand = (command: string): boolean =>\n axpAiParseSupervisorAgentToolName(command) != null;\n\n //#endregion\n\n //#region ---- Computed ----\n\n readonly hasMessages = computed(() => this.messages().length > 0);\n\n readonly toolResultByCallId = computed(() => axmBuildToolResultByCallId(this.messages()));\n\n readonly displayLines = computed(() =>\n this.messages().map((line, lineIndex) => ({ line, lineIndex })),\n );\n\n //#endregion\n\n //#region ---- Segment renderers ----\n\n protected roleTranslationKey(role: AXPAiChatMessage['role']): string {\n return `@conversation:chat.assist-renderer.delegated-agent.roles.${role}`;\n }\n\n protected resolveToolDisplayTitle(command: string): string {\n const agentId = axpAiParseSupervisorAgentToolName(command);\n if (agentId) {\n const title = this.agentTitleById()[agentId];\n if (title?.trim()) {\n return title.trim();\n }\n return agentId;\n }\n return command?.trim() || 'Tool';\n }\n\n protected toolResultForCallId(callId: string | undefined): AXPAiChatMessage | null {\n if (!callId?.trim()) {\n return null;\n }\n return this.toolResultByCallId().get(callId.trim()) ?? null;\n }\n\n protected delegatedAgentOutcomeSegmentsForCall(res: AXPAiChatMessage | null): AXPAiDelegatedAgentResultSegment[] {\n if (!res) {\n return [];\n }\n const raw = axpAiChatToolOrAgentResultBodyJson(res);\n if (!raw.trim()) {\n return [];\n }\n try {\n const o = JSON.parse(raw) as Record<string, unknown>;\n if (o['success'] === false) {\n return [];\n }\n return axpAiDelegatedAgentResultSegments(o as { success?: boolean; data?: { responses?: AXPAiDelegatedAgentResultSegment[] } });\n } catch {\n return [];\n }\n }\n\n protected delegatedPromptPreview(argumentsValue: unknown): string {\n return axpAiDelegatedAgentPromptPreview(argumentsValue);\n }\n\n protected formatArgs(args: unknown): string {\n return axmFormatTranscriptArgs(args);\n }\n\n protected formatToolResultBody(line: AXPAiChatMessage): string {\n return axmTryPrettyJson(axpAiChatToolOrAgentResultBodyJson(line));\n }\n\n protected formatFallbackSegment(seg: AXPAiChatResponse): string {\n return axmFormatTranscriptFallbackSegment(seg);\n }\n\n protected syntheticTextMessage(lineIndex: number, segIndex: number, text: string): AXMessage {\n return axmSyntheticEmbedMessage(this.embedParent(), `dt-${lineIndex}-${segIndex}`, {\n type: 'text',\n payload: { type: 'text', text },\n });\n }\n\n protected syntheticNodeEmbedMessage(lineIndex: number, segIndex: number, content: unknown): AXMessage {\n return axmSyntheticEmbedMessage(this.embedParent(), `dn-${lineIndex}-${segIndex}`, {\n type: 'node',\n payload: { type: 'node', content } as unknown as AXMessagePayload,\n });\n }\n\n protected markdownCodeLanguage(segment: unknown): AXCodeEditorDefaultLanguage {\n if (this.isMarkdownCodeSegment(segment) && segment.language.trim()) {\n return segment.language as AXCodeEditorDefaultLanguage;\n }\n return 'javascript';\n }\n\n protected markdownCodeValue(segment: unknown): string {\n if (this.isMarkdownCodeSegment(segment)) {\n return segment.code;\n }\n return '';\n }\n\n private isMarkdownCodeSegment(segment: unknown): segment is { type: 'code'; language: string; code: string } {\n if (!segment || typeof segment !== 'object') {\n return false;\n }\n const candidate = segment as { type?: unknown; language?: unknown; code?: unknown };\n return candidate.type === 'code' && typeof candidate.language === 'string' && typeof candidate.code === 'string';\n }\n\n //#endregion\n}\n\n//#endregion\n","<div class=\"axm-delegated-transcript\">\n @if (!hasMessages() && emptyHint()) {\n <p class=\"axm-delegated-transcript__empty\">{{ emptyHint() }}</p>\n } @else {\n <div class=\"axm-assist-bot axm-delegated-transcript__lines\" role=\"list\">\n <div class=\"axm-assist-renderer__accordion-group\" axAccordionGroup [accordion]=\"false\">\n @for (item of displayLines(); track item.lineIndex) {\n @let line = item.line;\n @let lineIndex = item.lineIndex;\n <div\n class=\"axm-delegated-transcript__line axm-assist-bot__line axm-assist-renderer__collapse-shell\"\n axAccordionItem\n #roleSection=\"axAccordionItem\"\n role=\"listitem\"\n [class.axm-assist-bot__line--user]=\"line.role === 'user'\"\n [class.axm-assist-bot__line--tool-role]=\"line.role === 'tool'\"\n [attr.data-role]=\"line.role\"\n >\n <header\n class=\"axm-delegated-transcript__role axm-assist-renderer__accordion-header\"\n axAccordionItemHeader\n >\n <span class=\"axm-assist-renderer__accordion-header-main\">\n <span class=\"axm-assist-renderer__accordion-header-title\">\n <i\n class=\"fa-light fa-chevron-down axm-assist-renderer__thinking-chevron\"\n [class.axm-assist-renderer__thinking-chevron--expanded]=\"!roleSection.isCollapsed()\"\n aria-hidden=\"true\"\n ></i>\n <span>{{ roleTranslationKey(line.role) | translate | async }}</span>\n </span>\n @if (line.delegatedReflection) {\n <span class=\"axm-delegated-transcript__reflection-badge\">{{\n '@conversation:chat.assist-renderer.delegated-agent.reflection' | translate | async\n }}</span>\n }\n @if (line.name?.trim()) {\n <span class=\"axm-delegated-transcript__name\">{{ line.name }}</span>\n }\n </span>\n </header>\n\n <div axAccordionItemContent>\n <div class=\"axm-assist-renderer__collapse-body axm-delegated-transcript__segments\">\n @for (seg of line.responses; track segIndex; let segIndex = $index) {\n @if (line.role === 'user' && seg.type === 'file') {\n <axm-assist-bot-file-line\n [parentMessage]=\"embedParent()\"\n [fileId]=\"seg.content.fileId\"\n />\n } @else if (line.role === 'user' && seg.type === 'text') {\n <div class=\"axm-assist-bot__segment\" [attr.dir]=\"segmentDir(seg.content)\">\n <ax-conversation-text-renderer [message]=\"syntheticTextMessage(lineIndex, segIndex, seg.content)\" />\n </div>\n } @else if (line.role === 'assistant' && seg.type === 'think') {\n <details class=\"axm-delegated-transcript__think\" open>\n <summary class=\"axm-delegated-transcript__think-summary\">\n <i class=\"fa-light fa-brain axm-assist-renderer__tool-title-icon\" aria-hidden=\"true\"></i>\n {{ '@conversation:chat.assist-renderer.sections.thinking' | translate | async }}\n </summary>\n <div\n class=\"axm-assist-renderer__thinking-body axm-assist-bot__segment\"\n [attr.dir]=\"segmentDir(seg.content)\"\n >\n {{ seg.content }}\n </div>\n </details>\n } @else if (line.role === 'assistant' && seg.type === 'text') {\n @let parsedLine = parseAssistLineText(seg.content);\n @if (parsedLine.thinking?.trim()) {\n <details class=\"axm-delegated-transcript__think\" open>\n <summary class=\"axm-delegated-transcript__think-summary\">\n <i class=\"fa-light fa-brain axm-assist-renderer__tool-title-icon\" aria-hidden=\"true\"></i>\n {{ '@conversation:chat.assist-renderer.sections.thinking' | translate | async }}\n </summary>\n <div\n class=\"axm-assist-renderer__thinking-body axm-assist-bot__segment\"\n [attr.dir]=\"segmentDir(parsedLine.thinking ?? '')\"\n >\n {{ parsedLine.thinking }}\n </div>\n </details>\n }\n @if (parsedLine.body.trim()) {\n <div\n class=\"axm-assist-bot__segment axm-assist-renderer__markdown\"\n [attr.dir]=\"segmentDir(parsedLine.body)\"\n >\n <axp-markdown-viewer [markdown]=\"parsedLine.body\">\n <ng-template axpMarkdownTemplate=\"code\" let-segment>\n <div class=\"axm-assist-renderer__tool-editor-wrap\" style=\"direction: ltr\">\n <ax-code-editor\n [ngModel]=\"markdownCodeValue(segment)\"\n [readonly]=\"true\"\n [language]=\"markdownCodeLanguage(segment)\"\n [lineNumbers]=\"true\"\n class=\"axm-assist-renderer__tool-editor\"\n ></ax-code-editor>\n </div>\n </ng-template>\n </axp-markdown-viewer>\n </div>\n }\n } @else if (\n line.role === 'assistant' &&\n (seg.type === 'agent' || seg.type === 'tool') &&\n isDelegatedAgentCommand(seg.content.command)\n ) {\n <div\n class=\"axm-assist-renderer__tool-card axm-assist-renderer__collapse-shell axm-delegated-transcript__tool-block\"\n >\n <div class=\"axm-assist-renderer__accordion-header axm-delegated-transcript__tool-header\">\n <span class=\"axm-assist-renderer__accordion-header-title\">\n <i class=\"fa-light fa-people-group axm-assist-renderer__tool-title-icon\" aria-hidden=\"true\"></i>\n {{ resolveToolDisplayTitle(seg.content.command) }}\n </span>\n <span class=\"axm-assist-renderer__badge axm-assist-renderer__badge--primary\">{{\n '@conversation:chat.assist-renderer.badges.agent' | translate | async\n }}</span>\n </div>\n <div class=\"axm-assist-renderer__collapse-body\">\n <div class=\"axm-assist-renderer__tool-body\">\n <div class=\"axm-assist-renderer__tool-section-label\">\n {{ '@conversation:chat.assist-renderer.sections.agent-prompt' | translate | async }}\n </div>\n <div\n class=\"axm-assist-bot__segment\"\n [attr.dir]=\"segmentDir(delegatedPromptPreview(seg.content.arguments))\"\n >\n {{ delegatedPromptPreview(seg.content.arguments) }}\n </div>\n <div class=\"axm-assist-renderer__tool-section-label\">\n {{ '@conversation:chat.assist-renderer.sections.input' | translate | async }}\n </div>\n <div class=\"axm-assist-renderer__tool-editor-wrap\" style=\"direction: ltr\">\n <ax-code-editor\n [ngModel]=\"formatArgs(seg.content.arguments)\"\n [readonly]=\"true\"\n language=\"json\"\n [lineNumbers]=\"true\"\n class=\"axm-assist-renderer__tool-editor\"\n ></ax-code-editor>\n </div>\n @if (toolResultForCallId(seg.callId); as resultLine) {\n @let outcomeSegs = delegatedAgentOutcomeSegmentsForCall(resultLine);\n @if (outcomeSegs.length > 0) {\n <div class=\"axm-assist-renderer__tool-section-label\">\n {{ '@conversation:chat.assist-renderer.sections.agent-answer' | translate | async }}\n </div>\n @for (outSeg of outcomeSegs; track $index) {\n @switch (outSeg.type) {\n @case ('text') {\n @let parsedOut = parseAssistLineText(outSeg.content);\n @if (parsedOut.body.trim()) {\n <div\n class=\"axm-assist-bot__segment axm-assist-renderer__markdown\"\n [attr.dir]=\"segmentDir(parsedOut.body)\"\n >\n <axp-markdown-viewer [markdown]=\"parsedOut.body\" />\n </div>\n }\n }\n @case ('think') {\n <div\n class=\"axm-assist-renderer__thinking-body axm-assist-bot__segment\"\n [attr.dir]=\"segmentDir(outSeg.content)\"\n >\n {{ outSeg.content }}\n </div>\n }\n @case ('file') {\n <axm-assist-bot-file-line\n [parentMessage]=\"embedParent()\"\n [fileId]=\"outSeg.content.fileId\"\n />\n }\n @case ('node') {\n @if (axmAssistWidgetNodeFromUnknown(outSeg.content); as widgetNode) {\n <div class=\"axm-assist-bot__segment\" dir=\"auto\">\n <axm-chat-user-form-renderer\n [message]=\"\n syntheticNodeEmbedMessage(lineIndex, segIndex * 1000 + $index, outSeg.content)\n \"\n />\n </div>\n }\n }\n @case ('followUp') {\n <div class=\"axm-assist-bot__segment\" dir=\"auto\">\n <axm-assist-suggestion-chips [items]=\"outSeg.content\" />\n </div>\n }\n }\n }\n } @else {\n <div class=\"axm-assist-renderer__tool-section-label\">\n {{ '@conversation:chat.assist-renderer.sections.output' | translate | async }}\n </div>\n <div class=\"axm-assist-renderer__tool-editor-wrap\" style=\"direction: ltr\">\n <ax-code-editor\n [ngModel]=\"formatToolResultBody(resultLine)\"\n [readonly]=\"true\"\n language=\"json\"\n [lineNumbers]=\"true\"\n class=\"axm-assist-renderer__tool-editor\"\n ></ax-code-editor>\n </div>\n }\n }\n </div>\n </div>\n </div>\n } @else if (line.role === 'assistant' && (seg.type === 'agent' || seg.type === 'tool')) {\n <div\n class=\"axm-assist-renderer__tool-card axm-assist-renderer__collapse-shell axm-delegated-transcript__tool-block\"\n >\n <div class=\"axm-assist-renderer__accordion-header axm-delegated-transcript__tool-header\">\n <span class=\"axm-assist-renderer__accordion-header-title\">\n <i\n class=\"fa-light fa-screwdriver-wrench axm-assist-renderer__tool-title-icon\"\n aria-hidden=\"true\"\n ></i>\n {{ resolveToolDisplayTitle(seg.content.command) }}\n </span>\n <span class=\"axm-assist-renderer__badge axm-assist-renderer__badge--primary\">{{\n '@conversation:chat.assist-renderer.badges.tool' | translate | async\n }}</span>\n </div>\n <div class=\"axm-assist-renderer__collapse-body\">\n <div class=\"axm-assist-renderer__tool-body\">\n <div class=\"axm-assist-renderer__tool-section-label\">\n {{ '@conversation:chat.assist-renderer.sections.input' | translate | async }}\n </div>\n <div class=\"axm-assist-renderer__tool-editor-wrap\" style=\"direction: ltr\">\n <ax-code-editor\n [ngModel]=\"formatArgs(seg.content.arguments)\"\n [readonly]=\"true\"\n language=\"json\"\n [lineNumbers]=\"true\"\n class=\"axm-assist-renderer__tool-editor\"\n ></ax-code-editor>\n </div>\n @if (toolResultForCallId(seg.callId); as resultLine) {\n <div class=\"axm-assist-renderer__tool-section-label\">\n {{ '@conversation:chat.assist-renderer.sections.output' | translate | async }}\n </div>\n <div class=\"axm-assist-renderer__tool-editor-wrap\" style=\"direction: ltr\">\n <ax-code-editor\n [ngModel]=\"formatToolResultBody(resultLine)\"\n [readonly]=\"true\"\n language=\"json\"\n [lineNumbers]=\"true\"\n class=\"axm-assist-renderer__tool-editor\"\n ></ax-code-editor>\n </div>\n }\n </div>\n </div>\n </div>\n } @else if (line.role === 'assistant' && seg.type === 'node') {\n @if (axmAssistWidgetNodeFromUnknown(seg.content)) {\n <div class=\"axm-assist-bot__segment\" dir=\"auto\">\n <axm-chat-user-form-renderer\n [message]=\"syntheticNodeEmbedMessage(lineIndex, segIndex, seg.content)\"\n />\n </div>\n }\n } @else if (line.role === 'assistant' && seg.type === 'file') {\n <axm-assist-bot-file-line\n [parentMessage]=\"embedParent()\"\n [fileId]=\"seg.content.fileId\"\n />\n } @else if (line.role === 'tool' && (seg.type === 'tool_result' || seg.type === 'agent_result')) {\n <!-- Shown on the matching tool/agent block above -->\n } @else if (line.role === 'system' && seg.type === 'text') {\n <div class=\"axm-assist-bot__segment\" [attr.dir]=\"segmentDir(seg.content)\">\n <ax-conversation-text-renderer [message]=\"syntheticTextMessage(lineIndex, segIndex, seg.content)\" />\n </div>\n } @else {\n <div\n class=\"axm-assist-bot__fallback axm-assist-bot__segment\"\n [attr.dir]=\"segmentDir(formatFallbackSegment(seg))\"\n >\n {{ formatFallbackSegment(seg) }}\n </div>\n }\n }\n </div>\n </div>\n </div>\n }\n </div>\n </div>\n }\n</div>\n","//#region ---- Imports ----\n\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXBasePageComponent } from '@acorex/components/page';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport type { AXPAiChatMessage, AXPAiDelegatedAgentTranscriptRunInput } from '@acorex/modules/ai-management';\nimport { AsyncPipe } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, ViewEncapsulation } from '@angular/core';\n\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { axmDownloadDelegatedAgentDetailJson } from '../utils/assist-delegated-agent-detail-export.util';\nimport { axmDelegatedTranscriptEmbedParentStub } from '../utils/assist-delegated-agent-transcript-view.util';\nimport { AXMAssistDelegatedAgentTranscriptViewComponent } from './assist-delegated-agent-transcript-view.component';\n\n//#endregion\n\n//#region ---- Types ----\n\nexport interface AXMAssistDelegatedAgentDetailPopupData {\n delegationCallId: string;\n messages: AXPAiChatMessage[];\n runInput?: AXPAiDelegatedAgentTranscriptRunInput;\n agentName?: string;\n emptyHint?: string;\n agentTitleById?: Record<string, string>;\n}\n\n//#endregion\n\n//#region ---- Component ----\n\n@Component({\n selector: 'axm-assist-delegated-agent-detail-popup',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [\n AXMAssistDelegatedAgentTranscriptViewComponent,\n AXButtonModule,\n AXTranslationModule,\n AsyncPipe,\n AXDecoratorModule,\n ],\n template: `\n <div class=\"axm-assist-delegated-detail-popup\">\n <axm-assist-delegated-agent-transcript-view\n [messages]=\"messages\"\n [embedParent]=\"embedParent\"\n [emptyHint]=\"emptyHint\"\n [agentTitleById]=\"agentTitleById\"\n />\n <ax-footer>\n <ax-suffix>\n <ax-button\n look=\"outline\"\n color=\"primary\"\n icon=\"fa-light fa-download\"\n [text]=\"'@conversation:chat.assist-renderer.delegated-agent.download-json' | translate | async\"\n [disabled]=\"!messages.length\"\n (onClick)=\"downloadJson()\"\n ></ax-button>\n <ax-button\n look=\"solid\"\n color=\"primary\"\n [text]=\"'@general:actions.close.title' | translate | async\"\n (onClick)=\"close()\"\n ></ax-button>\n </ax-suffix>\n </ax-footer>\n </div>\n `,\n styles: [\n `\n .axm-assist-delegated-detail-popup {\n display: flex;\n flex-direction: column;\n gap: 1rem;\n min-block-size: 0;\n }\n\n .axm-assist-delegated-detail-popup ax-footer ax-suffix {\n display: flex;\n flex-wrap: wrap;\n justify-content: flex-end;\n gap: 0.5rem;\n }\n `,\n ],\n})\nexport class AXMAssistDelegatedAgentDetailPopupComponent extends AXBasePageComponent {\n /** Set by {@link AXPopupService} from `data`. */\n delegationCallId = '';\n\n messages: AXPAiChatMessage[] = [];\n\n runInput?: AXPAiDelegatedAgentTranscriptRunInput;\n\n agentName?: string;\n\n emptyHint?: string;\n\n agentTitleById: Record<string, string> = {};\n\n embedParent = axmDelegatedTranscriptEmbedParentStub();\n\n protected downloadJson(): void {\n axmDownloadDelegatedAgentDetailJson(\n this.delegationCallId,\n this.messages,\n this.runInput,\n this.agentName,\n );\n }\n}\n\n//#endregion\n"],"names":["i2","i3","i4","i1"],"mappings":"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"}
1
+ {"version":3,"file":"acorex-modules-conversation-assist-delegated-agent-detail-popup.component-Dyx_n0bi.mjs","sources":["../../../../libs/modules/conversation/src/lib/features/chat/plugins/utils/assist-delegated-agent-detail-export.util.ts","../../../../libs/modules/conversation/src/lib/features/chat/plugins/utils/assist-delegated-agent-transcript-view.util.ts","../../../../libs/modules/conversation/src/lib/features/chat/plugins/message-renderers/assist-delegated-agent-transcript-view.component.ts","../../../../libs/modules/conversation/src/lib/features/chat/plugins/message-renderers/assist-delegated-agent-transcript-view.component.html","../../../../libs/modules/conversation/src/lib/features/chat/plugins/message-renderers/assist-delegated-agent-detail-popup.component.ts"],"sourcesContent":["//#region ---- Imports ----\n\nimport type {\n AXPAiChatMessage,\n AXPAiDelegatedAgentTranscriptRunInput,\n} from '@acorex/modules/ai-management';\n\nimport { axmDownloadDebugJson, axmSanitizeDebugFilenamePart } from './assist-debug-information.util';\n\n//#endregion\n\n//#region ---- Types ----\n\n/** JSON shape for delegated specialist detail download. */\nexport interface AXMAssistDelegatedAgentDetailExport {\n exportedAt: string;\n delegationCallId: string;\n agentName?: string;\n runInput?: AXPAiDelegatedAgentTranscriptRunInput;\n messages: AXPAiChatMessage[];\n}\n\n//#endregion\n\n//#region ---- Export ----\n\nexport function axmFormatDelegatedAgentDetailExportJson(\n delegationCallId: string,\n messages: AXPAiChatMessage[],\n runInput?: AXPAiDelegatedAgentTranscriptRunInput,\n agentName?: string,\n): string {\n const snapshot: AXMAssistDelegatedAgentDetailExport = {\n exportedAt: new Date().toISOString(),\n delegationCallId: delegationCallId.trim(),\n ...(agentName?.trim() ? { agentName: agentName.trim() } : {}),\n ...(runInput ? { runInput } : {}),\n messages,\n };\n return JSON.stringify(snapshot, null, 2);\n}\n\nexport function axmDownloadDelegatedAgentDetailJson(\n delegationCallId: string,\n messages: AXPAiChatMessage[],\n runInput?: AXPAiDelegatedAgentTranscriptRunInput,\n agentName?: string,\n): void {\n const text = axmFormatDelegatedAgentDetailExportJson(delegationCallId, messages, runInput, agentName);\n const filename = `assist-delegated-agent-${axmSanitizeDebugFilenamePart(delegationCallId)}.json`;\n axmDownloadDebugJson(filename, text);\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport type { AXMessage } from '@acorex/components/conversation2';\nimport type { AXPAiChatMessage } from '@acorex/modules/ai-management';\n\n//#endregion\n\n//#region ---- Tool result index ----\n\n/** Maps tool_call id → tool-role line carrying {@code tool_result} / {@code agent_result}. */\nexport function axmBuildToolResultByCallId(messages: AXPAiChatMessage[]): Map<string, AXPAiChatMessage> {\n const map = new Map<string, AXPAiChatMessage>();\n for (const line of messages) {\n if (line.role !== 'tool') {\n continue;\n }\n for (const seg of line.responses) {\n if (seg.type !== 'tool_result' && seg.type !== 'agent_result') {\n continue;\n }\n const callId = seg.callId?.trim();\n if (callId) {\n map.set(callId, line);\n }\n }\n }\n return map;\n}\n\n//#endregion\n\n//#region ---- Formatters ----\n\nexport function axmTryPrettyJson(raw: string): string {\n const trimmed = raw.trim();\n if (!trimmed) {\n return '';\n }\n try {\n return JSON.stringify(JSON.parse(trimmed), null, 2);\n } catch {\n return trimmed;\n }\n}\n\nexport function axmFormatTranscriptArgs(args: unknown): string {\n if (args == null) {\n return '';\n }\n if (typeof args === 'string') {\n return axmTryPrettyJson(args);\n }\n try {\n return JSON.stringify(args, null, 2);\n } catch {\n return String(args);\n }\n}\n\nexport function axmFormatTranscriptFallbackSegment(seg: unknown): string {\n try {\n return JSON.stringify(seg, null, 2);\n } catch {\n return String(seg);\n }\n}\n\n//#endregion\n\n//#region ---- Embed parent stub ----\n\n/** Minimal parent message for synthetic embed renderers inside the detail popup. */\nexport function axmDelegatedTranscriptEmbedParentStub(): AXMessage {\n return {\n id: 'assist-delegated-transcript-embed',\n conversationId: '',\n senderId: 'assist',\n type: 'text',\n payload: { type: 'text', text: '' },\n status: 'sent',\n metadata: { assistEmbed: true },\n } as unknown as AXMessage;\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { AXAccordionCdkModule } from '@acorex/cdk/accordion';\nimport { AXCodeEditorDefaultLanguage, AXCodeEditorModule } from '@acorex/components/code-editor';\nimport type { AXMessage, AXMessagePayload } from '@acorex/components/conversation2';\nimport { AXTextRendererComponent } from '@acorex/components/conversation2';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport type {\n AXPAiChatMessage,\n AXPAiChatResponse,\n AXPAiDelegatedAgentResultSegment,\n} from '@acorex/modules/ai-management';\nimport {\n axpAiChatToolOrAgentResultBodyJson,\n axpAiDelegatedAgentPromptPreview,\n axpAiDelegatedAgentResultSegments,\n axpAiParseSupervisorAgentToolName,\n} from '@acorex/modules/ai-management';\nimport { AXPMarkdownTemplateDirective, AXPMarkdownViewerComponent } from '@acorex/platform/layout/components';\nimport { AsyncPipe } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, computed, input, ViewEncapsulation } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\n\nimport {\n axmAssistWidgetNodeFromUnknown,\n axmParseAssistTranscriptTextEnvelope,\n axmSyntheticEmbedMessage,\n} from '../utils/assist-bot-transcript.util';\nimport {\n axmBuildToolResultByCallId,\n axmFormatTranscriptArgs,\n axmFormatTranscriptFallbackSegment,\n axmTryPrettyJson,\n} from '../utils/assist-delegated-agent-transcript-view.util';\nimport { axmAssistSegmentDirection } from '../utils/assist-segment-direction.util';\nimport { AXMAssistBotFileLineComponent } from './assist-bot-file-line.component';\nimport { AXMAssistSuggestionChipsComponent } from '../shared/assist-suggestion-chips.component';\nimport { AXMNodeMessageRendererComponent } from './node-message-renderer.component';\n\n//#endregion\n\n//#region ---- Component ----\n\n/**\n * Read-only {@link AXPAiChatMessage} transcript (role + responses[]) for delegated specialist detail.\n */\n@Component({\n selector: 'axm-assist-delegated-agent-transcript-view',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [\n AXTextRendererComponent,\n AXMNodeMessageRendererComponent,\n AXMAssistBotFileLineComponent,\n AXMAssistSuggestionChipsComponent,\n AXAccordionCdkModule,\n AXCodeEditorModule,\n AXPMarkdownViewerComponent,\n AXPMarkdownTemplateDirective,\n FormsModule,\n AXTranslationModule,\n AsyncPipe,\n ],\n templateUrl: './assist-delegated-agent-transcript-view.component.html',\n styleUrls: [\n './assist-message-renderer.component.scss',\n './assist-delegated-agent-transcript-view.component.scss',\n ],\n})\nexport class AXMAssistDelegatedAgentTranscriptViewComponent {\n //#region ---- Inputs ----\n\n readonly messages = input<AXPAiChatMessage[]>([]);\n readonly embedParent = input.required<AXMessage>();\n readonly emptyHint = input<string | undefined>(undefined);\n readonly agentTitleById = input<Record<string, string>>({});\n\n //#endregion\n\n //#region ---- Template helpers ----\n\n protected readonly segmentDir = axmAssistSegmentDirection;\n protected readonly parseAssistLineText = axmParseAssistTranscriptTextEnvelope;\n protected readonly axmAssistWidgetNodeFromUnknown = axmAssistWidgetNodeFromUnknown;\n protected readonly isDelegatedAgentCommand = (command: string): boolean =>\n axpAiParseSupervisorAgentToolName(command) != null;\n\n //#endregion\n\n //#region ---- Computed ----\n\n readonly hasMessages = computed(() => this.messages().length > 0);\n\n readonly toolResultByCallId = computed(() => axmBuildToolResultByCallId(this.messages()));\n\n readonly displayLines = computed(() =>\n this.messages().map((line, lineIndex) => ({ line, lineIndex })),\n );\n\n //#endregion\n\n //#region ---- Segment renderers ----\n\n protected roleTranslationKey(role: AXPAiChatMessage['role']): string {\n return `@conversation:chat.assist-renderer.delegated-agent.roles.${role}`;\n }\n\n protected resolveToolDisplayTitle(command: string): string {\n const agentId = axpAiParseSupervisorAgentToolName(command);\n if (agentId) {\n const title = this.agentTitleById()[agentId];\n if (title?.trim()) {\n return title.trim();\n }\n return agentId;\n }\n return command?.trim() || 'Tool';\n }\n\n protected toolResultForCallId(callId: string | undefined): AXPAiChatMessage | null {\n if (!callId?.trim()) {\n return null;\n }\n return this.toolResultByCallId().get(callId.trim()) ?? null;\n }\n\n protected delegatedAgentOutcomeSegmentsForCall(res: AXPAiChatMessage | null): AXPAiDelegatedAgentResultSegment[] {\n if (!res) {\n return [];\n }\n const raw = axpAiChatToolOrAgentResultBodyJson(res);\n if (!raw.trim()) {\n return [];\n }\n try {\n const o = JSON.parse(raw) as Record<string, unknown>;\n if (o['success'] === false) {\n return [];\n }\n return axpAiDelegatedAgentResultSegments(o as { success?: boolean; data?: { responses?: AXPAiDelegatedAgentResultSegment[] } });\n } catch {\n return [];\n }\n }\n\n protected delegatedPromptPreview(argumentsValue: unknown): string {\n return axpAiDelegatedAgentPromptPreview(argumentsValue);\n }\n\n protected formatArgs(args: unknown): string {\n return axmFormatTranscriptArgs(args);\n }\n\n protected formatToolResultBody(line: AXPAiChatMessage): string {\n return axmTryPrettyJson(axpAiChatToolOrAgentResultBodyJson(line));\n }\n\n protected formatFallbackSegment(seg: AXPAiChatResponse): string {\n return axmFormatTranscriptFallbackSegment(seg);\n }\n\n protected syntheticTextMessage(lineIndex: number, segIndex: number, text: string): AXMessage {\n return axmSyntheticEmbedMessage(this.embedParent(), `dt-${lineIndex}-${segIndex}`, {\n type: 'text',\n payload: { type: 'text', text },\n });\n }\n\n protected syntheticNodeEmbedMessage(lineIndex: number, segIndex: number, content: unknown): AXMessage {\n return axmSyntheticEmbedMessage(this.embedParent(), `dn-${lineIndex}-${segIndex}`, {\n type: 'node',\n payload: { type: 'node', content } as unknown as AXMessagePayload,\n });\n }\n\n protected markdownCodeLanguage(segment: unknown): AXCodeEditorDefaultLanguage {\n if (this.isMarkdownCodeSegment(segment) && segment.language.trim()) {\n return segment.language as AXCodeEditorDefaultLanguage;\n }\n return 'javascript';\n }\n\n protected markdownCodeValue(segment: unknown): string {\n if (this.isMarkdownCodeSegment(segment)) {\n return segment.code;\n }\n return '';\n }\n\n private isMarkdownCodeSegment(segment: unknown): segment is { type: 'code'; language: string; code: string } {\n if (!segment || typeof segment !== 'object') {\n return false;\n }\n const candidate = segment as { type?: unknown; language?: unknown; code?: unknown };\n return candidate.type === 'code' && typeof candidate.language === 'string' && typeof candidate.code === 'string';\n }\n\n //#endregion\n}\n\n//#endregion\n","<div class=\"axm-delegated-transcript\">\n @if (!hasMessages() && emptyHint()) {\n <p class=\"axm-delegated-transcript__empty\">{{ emptyHint() }}</p>\n } @else {\n <div class=\"axm-assist-bot axm-delegated-transcript__lines\" role=\"list\">\n <div class=\"axm-assist-renderer__accordion-group\" axAccordionGroup [accordion]=\"false\">\n @for (item of displayLines(); track item.lineIndex) {\n @let line = item.line;\n @let lineIndex = item.lineIndex;\n <div\n class=\"axm-delegated-transcript__line axm-assist-bot__line axm-assist-renderer__collapse-shell\"\n axAccordionItem\n #roleSection=\"axAccordionItem\"\n role=\"listitem\"\n [class.axm-assist-bot__line--user]=\"line.role === 'user'\"\n [class.axm-assist-bot__line--tool-role]=\"line.role === 'tool'\"\n [attr.data-role]=\"line.role\"\n >\n <header\n class=\"axm-delegated-transcript__role axm-assist-renderer__accordion-header\"\n axAccordionItemHeader\n >\n <span class=\"axm-assist-renderer__accordion-header-main\">\n <span class=\"axm-assist-renderer__accordion-header-title\">\n <i\n class=\"fa-light fa-chevron-down axm-assist-renderer__thinking-chevron\"\n [class.axm-assist-renderer__thinking-chevron--expanded]=\"!roleSection.isCollapsed()\"\n aria-hidden=\"true\"\n ></i>\n <span>{{ roleTranslationKey(line.role) | translate | async }}</span>\n </span>\n @if (line.delegatedReflection) {\n <span class=\"axm-delegated-transcript__reflection-badge\">{{\n '@conversation:chat.assist-renderer.delegated-agent.reflection' | translate | async\n }}</span>\n }\n @if (line.name?.trim()) {\n <span class=\"axm-delegated-transcript__name\">{{ line.name }}</span>\n }\n </span>\n </header>\n\n <div axAccordionItemContent>\n <div class=\"axm-assist-renderer__collapse-body axm-delegated-transcript__segments\">\n @for (seg of line.responses; track segIndex; let segIndex = $index) {\n @if (line.role === 'user' && seg.type === 'file') {\n <axm-assist-bot-file-line\n [parentMessage]=\"embedParent()\"\n [fileId]=\"seg.content.fileId\"\n />\n } @else if (line.role === 'user' && seg.type === 'text') {\n <div class=\"axm-assist-bot__segment\" [attr.dir]=\"segmentDir(seg.content)\">\n <ax-conversation-text-renderer [message]=\"syntheticTextMessage(lineIndex, segIndex, seg.content)\" />\n </div>\n } @else if (line.role === 'assistant' && seg.type === 'think') {\n <details class=\"axm-delegated-transcript__think\" open>\n <summary class=\"axm-delegated-transcript__think-summary\">\n <i class=\"fa-light fa-brain axm-assist-renderer__tool-title-icon\" aria-hidden=\"true\"></i>\n {{ '@conversation:chat.assist-renderer.sections.thinking' | translate | async }}\n </summary>\n <div\n class=\"axm-assist-renderer__thinking-body axm-assist-bot__segment\"\n [attr.dir]=\"segmentDir(seg.content)\"\n >\n {{ seg.content }}\n </div>\n </details>\n } @else if (line.role === 'assistant' && seg.type === 'text') {\n @let parsedLine = parseAssistLineText(seg.content);\n @if (parsedLine.thinking?.trim()) {\n <details class=\"axm-delegated-transcript__think\" open>\n <summary class=\"axm-delegated-transcript__think-summary\">\n <i class=\"fa-light fa-brain axm-assist-renderer__tool-title-icon\" aria-hidden=\"true\"></i>\n {{ '@conversation:chat.assist-renderer.sections.thinking' | translate | async }}\n </summary>\n <div\n class=\"axm-assist-renderer__thinking-body axm-assist-bot__segment\"\n [attr.dir]=\"segmentDir(parsedLine.thinking ?? '')\"\n >\n {{ parsedLine.thinking }}\n </div>\n </details>\n }\n @if (parsedLine.body.trim()) {\n <div\n class=\"axm-assist-bot__segment axm-assist-renderer__markdown\"\n [attr.dir]=\"segmentDir(parsedLine.body)\"\n >\n <axp-markdown-viewer [markdown]=\"parsedLine.body\">\n <ng-template axpMarkdownTemplate=\"code\" let-segment>\n <div class=\"axm-assist-renderer__tool-editor-wrap\" style=\"direction: ltr\">\n <ax-code-editor\n [ngModel]=\"markdownCodeValue(segment)\"\n [readonly]=\"true\"\n [language]=\"markdownCodeLanguage(segment)\"\n [lineNumbers]=\"true\"\n class=\"axm-assist-renderer__tool-editor\"\n ></ax-code-editor>\n </div>\n </ng-template>\n </axp-markdown-viewer>\n </div>\n }\n } @else if (\n line.role === 'assistant' &&\n (seg.type === 'agent' || seg.type === 'tool') &&\n isDelegatedAgentCommand(seg.content.command)\n ) {\n <div\n class=\"axm-assist-renderer__tool-card axm-assist-renderer__collapse-shell axm-delegated-transcript__tool-block\"\n >\n <div class=\"axm-assist-renderer__accordion-header axm-delegated-transcript__tool-header\">\n <span class=\"axm-assist-renderer__accordion-header-title\">\n <i class=\"fa-light fa-people-group axm-assist-renderer__tool-title-icon\" aria-hidden=\"true\"></i>\n {{ resolveToolDisplayTitle(seg.content.command) }}\n </span>\n <span class=\"axm-assist-renderer__badge axm-assist-renderer__badge--primary\">{{\n '@conversation:chat.assist-renderer.badges.agent' | translate | async\n }}</span>\n </div>\n <div class=\"axm-assist-renderer__collapse-body\">\n <div class=\"axm-assist-renderer__tool-body\">\n <div class=\"axm-assist-renderer__tool-section-label\">\n {{ '@conversation:chat.assist-renderer.sections.agent-prompt' | translate | async }}\n </div>\n <div\n class=\"axm-assist-bot__segment\"\n [attr.dir]=\"segmentDir(delegatedPromptPreview(seg.content.arguments))\"\n >\n {{ delegatedPromptPreview(seg.content.arguments) }}\n </div>\n <div class=\"axm-assist-renderer__tool-section-label\">\n {{ '@conversation:chat.assist-renderer.sections.input' | translate | async }}\n </div>\n <div class=\"axm-assist-renderer__tool-editor-wrap\" style=\"direction: ltr\">\n <ax-code-editor\n [ngModel]=\"formatArgs(seg.content.arguments)\"\n [readonly]=\"true\"\n language=\"json\"\n [lineNumbers]=\"true\"\n class=\"axm-assist-renderer__tool-editor\"\n ></ax-code-editor>\n </div>\n @if (toolResultForCallId(seg.callId); as resultLine) {\n @let outcomeSegs = delegatedAgentOutcomeSegmentsForCall(resultLine);\n @if (outcomeSegs.length > 0) {\n <div class=\"axm-assist-renderer__tool-section-label\">\n {{ '@conversation:chat.assist-renderer.sections.agent-answer' | translate | async }}\n </div>\n @for (outSeg of outcomeSegs; track $index) {\n @switch (outSeg.type) {\n @case ('text') {\n @let parsedOut = parseAssistLineText(outSeg.content);\n @if (parsedOut.body.trim()) {\n <div\n class=\"axm-assist-bot__segment axm-assist-renderer__markdown\"\n [attr.dir]=\"segmentDir(parsedOut.body)\"\n >\n <axp-markdown-viewer [markdown]=\"parsedOut.body\" />\n </div>\n }\n }\n @case ('think') {\n <div\n class=\"axm-assist-renderer__thinking-body axm-assist-bot__segment\"\n [attr.dir]=\"segmentDir(outSeg.content)\"\n >\n {{ outSeg.content }}\n </div>\n }\n @case ('file') {\n <axm-assist-bot-file-line\n [parentMessage]=\"embedParent()\"\n [fileId]=\"outSeg.content.fileId\"\n />\n }\n @case ('node') {\n @if (axmAssistWidgetNodeFromUnknown(outSeg.content); as widgetNode) {\n <div class=\"axm-assist-bot__segment\" dir=\"auto\">\n <axm-chat-user-form-renderer\n [message]=\"\n syntheticNodeEmbedMessage(lineIndex, segIndex * 1000 + $index, outSeg.content)\n \"\n />\n </div>\n }\n }\n @case ('followUp') {\n <div class=\"axm-assist-bot__segment\" dir=\"auto\">\n <axm-assist-suggestion-chips [items]=\"outSeg.content\" />\n </div>\n }\n }\n }\n } @else {\n <div class=\"axm-assist-renderer__tool-section-label\">\n {{ '@conversation:chat.assist-renderer.sections.output' | translate | async }}\n </div>\n <div class=\"axm-assist-renderer__tool-editor-wrap\" style=\"direction: ltr\">\n <ax-code-editor\n [ngModel]=\"formatToolResultBody(resultLine)\"\n [readonly]=\"true\"\n language=\"json\"\n [lineNumbers]=\"true\"\n class=\"axm-assist-renderer__tool-editor\"\n ></ax-code-editor>\n </div>\n }\n }\n </div>\n </div>\n </div>\n } @else if (line.role === 'assistant' && (seg.type === 'agent' || seg.type === 'tool')) {\n <div\n class=\"axm-assist-renderer__tool-card axm-assist-renderer__collapse-shell axm-delegated-transcript__tool-block\"\n >\n <div class=\"axm-assist-renderer__accordion-header axm-delegated-transcript__tool-header\">\n <span class=\"axm-assist-renderer__accordion-header-title\">\n <i\n class=\"fa-light fa-screwdriver-wrench axm-assist-renderer__tool-title-icon\"\n aria-hidden=\"true\"\n ></i>\n {{ resolveToolDisplayTitle(seg.content.command) }}\n </span>\n <span class=\"axm-assist-renderer__badge axm-assist-renderer__badge--primary\">{{\n '@conversation:chat.assist-renderer.badges.tool' | translate | async\n }}</span>\n </div>\n <div class=\"axm-assist-renderer__collapse-body\">\n <div class=\"axm-assist-renderer__tool-body\">\n <div class=\"axm-assist-renderer__tool-section-label\">\n {{ '@conversation:chat.assist-renderer.sections.input' | translate | async }}\n </div>\n <div class=\"axm-assist-renderer__tool-editor-wrap\" style=\"direction: ltr\">\n <ax-code-editor\n [ngModel]=\"formatArgs(seg.content.arguments)\"\n [readonly]=\"true\"\n language=\"json\"\n [lineNumbers]=\"true\"\n class=\"axm-assist-renderer__tool-editor\"\n ></ax-code-editor>\n </div>\n @if (toolResultForCallId(seg.callId); as resultLine) {\n <div class=\"axm-assist-renderer__tool-section-label\">\n {{ '@conversation:chat.assist-renderer.sections.output' | translate | async }}\n </div>\n <div class=\"axm-assist-renderer__tool-editor-wrap\" style=\"direction: ltr\">\n <ax-code-editor\n [ngModel]=\"formatToolResultBody(resultLine)\"\n [readonly]=\"true\"\n language=\"json\"\n [lineNumbers]=\"true\"\n class=\"axm-assist-renderer__tool-editor\"\n ></ax-code-editor>\n </div>\n }\n </div>\n </div>\n </div>\n } @else if (line.role === 'assistant' && seg.type === 'node') {\n @if (axmAssistWidgetNodeFromUnknown(seg.content)) {\n <div class=\"axm-assist-bot__segment\" dir=\"auto\">\n <axm-chat-user-form-renderer\n [message]=\"syntheticNodeEmbedMessage(lineIndex, segIndex, seg.content)\"\n />\n </div>\n }\n } @else if (line.role === 'assistant' && seg.type === 'file') {\n <axm-assist-bot-file-line\n [parentMessage]=\"embedParent()\"\n [fileId]=\"seg.content.fileId\"\n />\n } @else if (line.role === 'tool' && (seg.type === 'tool_result' || seg.type === 'agent_result')) {\n <!-- Shown on the matching tool/agent block above -->\n } @else if (line.role === 'system' && seg.type === 'text') {\n <div class=\"axm-assist-bot__segment\" [attr.dir]=\"segmentDir(seg.content)\">\n <ax-conversation-text-renderer [message]=\"syntheticTextMessage(lineIndex, segIndex, seg.content)\" />\n </div>\n } @else {\n <div\n class=\"axm-assist-bot__fallback axm-assist-bot__segment\"\n [attr.dir]=\"segmentDir(formatFallbackSegment(seg))\"\n >\n {{ formatFallbackSegment(seg) }}\n </div>\n }\n }\n </div>\n </div>\n </div>\n }\n </div>\n </div>\n }\n</div>\n","//#region ---- Imports ----\n\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXBasePageComponent } from '@acorex/components/page';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport type { AXPAiChatMessage, AXPAiDelegatedAgentTranscriptRunInput } from '@acorex/modules/ai-management';\nimport { AsyncPipe } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, ViewEncapsulation } from '@angular/core';\n\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { axmDownloadDelegatedAgentDetailJson } from '../utils/assist-delegated-agent-detail-export.util';\nimport { axmDelegatedTranscriptEmbedParentStub } from '../utils/assist-delegated-agent-transcript-view.util';\nimport { AXMAssistDelegatedAgentTranscriptViewComponent } from './assist-delegated-agent-transcript-view.component';\n\n//#endregion\n\n//#region ---- Types ----\n\nexport interface AXMAssistDelegatedAgentDetailPopupData {\n delegationCallId: string;\n messages: AXPAiChatMessage[];\n runInput?: AXPAiDelegatedAgentTranscriptRunInput;\n agentName?: string;\n emptyHint?: string;\n agentTitleById?: Record<string, string>;\n}\n\n//#endregion\n\n//#region ---- Component ----\n\n@Component({\n selector: 'axm-assist-delegated-agent-detail-popup',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [\n AXMAssistDelegatedAgentTranscriptViewComponent,\n AXButtonModule,\n AXTranslationModule,\n AsyncPipe,\n AXDecoratorModule,\n ],\n template: `\n <div class=\"axm-assist-delegated-detail-popup\">\n <axm-assist-delegated-agent-transcript-view\n [messages]=\"messages\"\n [embedParent]=\"embedParent\"\n [emptyHint]=\"emptyHint\"\n [agentTitleById]=\"agentTitleById\"\n />\n <ax-footer>\n <ax-suffix>\n <ax-button\n look=\"outline\"\n color=\"primary\"\n icon=\"fa-light fa-download\"\n [text]=\"'@conversation:chat.assist-renderer.delegated-agent.download-json' | translate | async\"\n [disabled]=\"!messages.length\"\n (onClick)=\"downloadJson()\"\n ></ax-button>\n <ax-button\n look=\"solid\"\n color=\"primary\"\n [text]=\"'@general:actions.close.title' | translate | async\"\n (onClick)=\"close()\"\n ></ax-button>\n </ax-suffix>\n </ax-footer>\n </div>\n `,\n styles: [\n `\n .axm-assist-delegated-detail-popup {\n display: flex;\n flex-direction: column;\n gap: 1rem;\n min-block-size: 0;\n }\n\n .axm-assist-delegated-detail-popup ax-footer ax-suffix {\n display: flex;\n flex-wrap: wrap;\n justify-content: flex-end;\n gap: 0.5rem;\n }\n `,\n ],\n})\nexport class AXMAssistDelegatedAgentDetailPopupComponent extends AXBasePageComponent {\n /** Set by {@link AXPopupService} from `data`. */\n delegationCallId = '';\n\n messages: AXPAiChatMessage[] = [];\n\n runInput?: AXPAiDelegatedAgentTranscriptRunInput;\n\n agentName?: string;\n\n emptyHint?: string;\n\n agentTitleById: Record<string, string> = {};\n\n embedParent = axmDelegatedTranscriptEmbedParentStub();\n\n protected downloadJson(): void {\n axmDownloadDelegatedAgentDetailJson(\n this.delegationCallId,\n this.messages,\n this.runInput,\n this.agentName,\n );\n }\n}\n\n//#endregion\n"],"names":["i2","i3","i4","i1"],"mappings":"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"}
@@ -2,7 +2,7 @@ import * as i0 from '@angular/core';
2
2
  import { input, inject, computed, ChangeDetectionStrategy, Component } from '@angular/core';
3
3
  import { ActivatedRoute } from '@angular/router';
4
4
  import { AXPPageLayoutBaseComponent, AXPPageLayoutBase } from '@acorex/platform/layout/views';
5
- import { h as AXMCommentComponent } from './acorex-modules-conversation-acorex-modules-conversation-B_JcAHvL.mjs';
5
+ import { h as AXMCommentComponent } from './acorex-modules-conversation-acorex-modules-conversation-Dc8te-PO.mjs';
6
6
 
7
7
  //#region ---- Comments Page Component ----
8
8
  /**
@@ -75,4 +75,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
75
75
  }], propDecorators: { rootContext: [{ type: i0.Input, args: [{ isSignal: true, alias: "rootContext", required: true }] }], pageConfig: [{ type: i0.Input, args: [{ isSignal: true, alias: "pageConfig", required: false }] }] } });
76
76
 
77
77
  export { AXMCommentsPageComponent };
78
- //# sourceMappingURL=acorex-modules-conversation-comments-page.component-B6TJhe4T.mjs.map
78
+ //# sourceMappingURL=acorex-modules-conversation-comments-page.component--g4ugC_L.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"acorex-modules-conversation-comments-page.component-B6TJhe4T.mjs","sources":["../../../../libs/modules/conversation/src/lib/features/comment/comments-page/comments-page.component.ts"],"sourcesContent":["import { ChangeDetectionStrategy, Component, computed, inject, input } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\nimport { AXPPageLayoutBase, AXPPageLayoutBaseComponent } from '@acorex/platform/layout/views';\nimport { AXMCommentComponent } from '../comment.component';\n\n//#region ---- Comments Page Component ----\n\n/**\n * Page component that renders comments using AXMCommentComponent.\n * Used when comments plugin has display: 'page'.\n * Receives rootContext (entity data) and derives refrenceType/refrenceId from route params and context.\n */\n@Component({\n selector: 'axm-comments-page',\n imports: [AXMCommentComponent],\n template: `\n @if (refrenceType() && refrenceId()) {\n <axm-comment\n [refrenceType]=\"refrenceType()!\"\n [refrenceId]=\"refrenceId()!\"\n [subject]=\"subject()\"\n ></axm-comment>\n }\n `,\n styles: `\n :host {\n display: block;\n width: 100%;\n height: 100%;\n }\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: AXPPageLayoutBase,\n useExisting: AXMCommentsPageComponent,\n },\n ],\n})\nexport class AXMCommentsPageComponent extends AXPPageLayoutBaseComponent {\n\n //#region ---- Inputs ----\n\n /** Entity data context passed by the page host */\n rootContext = input.required<Record<string, any>>();\n\n /** Page-level configuration from the entity page definition */\n pageConfig = input<Record<string, unknown>>();\n\n //#endregion\n\n //#region ---- Services & Dependencies ----\n\n private route = inject(ActivatedRoute);\n\n //#endregion\n\n //#region ---- Computed Properties ----\n\n protected refrenceType = computed(() => {\n const moduleName = this.route.snapshot.parent?.paramMap.get('module');\n const entityName = this.route.snapshot.paramMap.get('entity');\n if (moduleName && entityName) {\n return `${moduleName}.${entityName}`;\n }\n return null;\n });\n\n protected refrenceId = computed(() => {\n const ctx = this.rootContext();\n return ctx?.['id'] ?? null;\n });\n\n protected subject = computed(() => {\n const ctx = this.rootContext();\n return ctx?.['title'] ?? '';\n });\n\n //#endregion\n\n}\n\n//#endregion\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"acorex-modules-conversation-comments-page.component--g4ugC_L.mjs","sources":["../../../../libs/modules/conversation/src/lib/features/comment/comments-page/comments-page.component.ts"],"sourcesContent":["import { ChangeDetectionStrategy, Component, computed, inject, input } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\nimport { AXPPageLayoutBase, AXPPageLayoutBaseComponent } from '@acorex/platform/layout/views';\nimport { AXMCommentComponent } from '../comment.component';\n\n//#region ---- Comments Page Component ----\n\n/**\n * Page component that renders comments using AXMCommentComponent.\n * Used when comments plugin has display: 'page'.\n * Receives rootContext (entity data) and derives refrenceType/refrenceId from route params and context.\n */\n@Component({\n selector: 'axm-comments-page',\n imports: [AXMCommentComponent],\n template: `\n @if (refrenceType() && refrenceId()) {\n <axm-comment\n [refrenceType]=\"refrenceType()!\"\n [refrenceId]=\"refrenceId()!\"\n [subject]=\"subject()\"\n ></axm-comment>\n }\n `,\n styles: `\n :host {\n display: block;\n width: 100%;\n height: 100%;\n }\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: AXPPageLayoutBase,\n useExisting: AXMCommentsPageComponent,\n },\n ],\n})\nexport class AXMCommentsPageComponent extends AXPPageLayoutBaseComponent {\n\n //#region ---- Inputs ----\n\n /** Entity data context passed by the page host */\n rootContext = input.required<Record<string, any>>();\n\n /** Page-level configuration from the entity page definition */\n pageConfig = input<Record<string, unknown>>();\n\n //#endregion\n\n //#region ---- Services & Dependencies ----\n\n private route = inject(ActivatedRoute);\n\n //#endregion\n\n //#region ---- Computed Properties ----\n\n protected refrenceType = computed(() => {\n const moduleName = this.route.snapshot.parent?.paramMap.get('module');\n const entityName = this.route.snapshot.paramMap.get('entity');\n if (moduleName && entityName) {\n return `${moduleName}.${entityName}`;\n }\n return null;\n });\n\n protected refrenceId = computed(() => {\n const ctx = this.rootContext();\n return ctx?.['id'] ?? null;\n });\n\n protected subject = computed(() => {\n const ctx = this.rootContext();\n return ctx?.['title'] ?? '';\n });\n\n //#endregion\n\n}\n\n//#endregion\n"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import * as i0 from '@angular/core';
2
2
  import { inject, Injectable } from '@angular/core';
3
- import { b as AXMConversationEntityStoreService } from './acorex-modules-conversation-acorex-modules-conversation-B_JcAHvL.mjs';
3
+ import { b as AXMConversationEntityStoreService } from './acorex-modules-conversation-acorex-modules-conversation-Dc8te-PO.mjs';
4
4
 
5
5
  //#endregion
6
6
  //#region ---- Command ----
@@ -27,4 +27,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
27
27
  }] });
28
28
 
29
29
  export { AXMConversationEmitTypingIndicatorCommand };
30
- //# sourceMappingURL=acorex-modules-conversation-emit-typing-indicator.command-CWRdPl-S.mjs.map
30
+ //# sourceMappingURL=acorex-modules-conversation-emit-typing-indicator.command-BOldPLQ0.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"acorex-modules-conversation-emit-typing-indicator.command-CWRdPl-S.mjs","sources":["../../../../libs/modules/conversation/src/lib/features/commands/emit-typing-indicator.command.ts"],"sourcesContent":["//#region ---- Imports ----\n\nimport { AXPExecuteCommandResult } from '@acorex/platform/contracts';\nimport { AXPCommand } from '@acorex/platform/runtime';\nimport { inject, Injectable } from '@angular/core';\n\nimport { AXMConversationEntityStoreService } from '../chat/services/conversation-entity-store.service';\n\n//#endregion\n\n//#region ---- Types ----\n\nexport interface AXMEmitTypingIndicatorOptions {\n conversationId: string;\n userId: string;\n userName: string;\n active: boolean;\n}\n\n//#endregion\n\n//#region ---- Command ----\n\n@Injectable({ providedIn: 'root' })\nexport class AXMConversationEmitTypingIndicatorCommand implements AXPCommand<AXMEmitTypingIndicatorOptions, void> {\n private readonly store = inject(AXMConversationEntityStoreService);\n\n async execute(input: AXMEmitTypingIndicatorOptions | unknown): Promise<AXPExecuteCommandResult<void>> {\n const options = input as AXMEmitTypingIndicatorOptions;\n this.store.publishTypingIndicator({\n conversationId: options.conversationId,\n userId: options.userId,\n userName: options.userName,\n timestamp: new Date(options.active ? Date.now() : Date.now() - 10000),\n });\n return { success: true };\n }\n}\n\n//#endregion\n"],"names":[],"mappings":";;;;AAmBA;AAEA;MAGa,yCAAyC,CAAA;AADtD,IAAA,WAAA,GAAA;AAEmB,QAAA,IAAA,CAAA,KAAK,GAAG,MAAM,CAAC,iCAAiC,CAAC;AAYnE,IAAA;IAVC,MAAM,OAAO,CAAC,KAA8C,EAAA;QAC1D,MAAM,OAAO,GAAG,KAAsC;AACtD,QAAA,IAAI,CAAC,KAAK,CAAC,sBAAsB,CAAC;YAChC,cAAc,EAAE,OAAO,CAAC,cAAc;YACtC,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,SAAS,EAAE,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC;AACtE,SAAA,CAAC;AACF,QAAA,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE;IAC1B;8GAZW,yCAAyC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAzC,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,yCAAyC,cAD5B,MAAM,EAAA,CAAA,CAAA;;2FACnB,yCAAyC,EAAA,UAAA,EAAA,CAAA;kBADrD,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;;;"}
1
+ {"version":3,"file":"acorex-modules-conversation-emit-typing-indicator.command-BOldPLQ0.mjs","sources":["../../../../libs/modules/conversation/src/lib/features/commands/emit-typing-indicator.command.ts"],"sourcesContent":["//#region ---- Imports ----\n\nimport { AXPExecuteCommandResult } from '@acorex/platform/contracts';\nimport { AXPCommand } from '@acorex/platform/runtime';\nimport { inject, Injectable } from '@angular/core';\n\nimport { AXMConversationEntityStoreService } from '../chat/services/conversation-entity-store.service';\n\n//#endregion\n\n//#region ---- Types ----\n\nexport interface AXMEmitTypingIndicatorOptions {\n conversationId: string;\n userId: string;\n userName: string;\n active: boolean;\n}\n\n//#endregion\n\n//#region ---- Command ----\n\n@Injectable({ providedIn: 'root' })\nexport class AXMConversationEmitTypingIndicatorCommand implements AXPCommand<AXMEmitTypingIndicatorOptions, void> {\n private readonly store = inject(AXMConversationEntityStoreService);\n\n async execute(input: AXMEmitTypingIndicatorOptions | unknown): Promise<AXPExecuteCommandResult<void>> {\n const options = input as AXMEmitTypingIndicatorOptions;\n this.store.publishTypingIndicator({\n conversationId: options.conversationId,\n userId: options.userId,\n userName: options.userName,\n timestamp: new Date(options.active ? Date.now() : Date.now() - 10000),\n });\n return { success: true };\n }\n}\n\n//#endregion\n"],"names":[],"mappings":";;;;AAmBA;AAEA;MAGa,yCAAyC,CAAA;AADtD,IAAA,WAAA,GAAA;AAEmB,QAAA,IAAA,CAAA,KAAK,GAAG,MAAM,CAAC,iCAAiC,CAAC;AAYnE,IAAA;IAVC,MAAM,OAAO,CAAC,KAA8C,EAAA;QAC1D,MAAM,OAAO,GAAG,KAAsC;AACtD,QAAA,IAAI,CAAC,KAAK,CAAC,sBAAsB,CAAC;YAChC,cAAc,EAAE,OAAO,CAAC,cAAc;YACtC,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,SAAS,EAAE,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC;AACtE,SAAA,CAAC;AACF,QAAA,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE;IAC1B;8GAZW,yCAAyC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAzC,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,yCAAyC,cAD5B,MAAM,EAAA,CAAA,CAAA;;2FACnB,yCAAyC,EAAA,UAAA,EAAA,CAAA;kBADrD,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;;;"}
@@ -1,6 +1,6 @@
1
1
  import * as i0 from '@angular/core';
2
2
  import { inject, Injectable } from '@angular/core';
3
- import { b as AXMConversationEntityStoreService } from './acorex-modules-conversation-acorex-modules-conversation-B_JcAHvL.mjs';
3
+ import { b as AXMConversationEntityStoreService } from './acorex-modules-conversation-acorex-modules-conversation-Dc8te-PO.mjs';
4
4
 
5
5
  //#endregion
6
6
  //#region ---- Command ----
@@ -27,4 +27,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
27
27
  }] });
28
28
 
29
29
  export { AXMConversationMarkConversationUnreadCommand };
30
- //# sourceMappingURL=acorex-modules-conversation-mark-conversation-unread.command-CZlsLAsb.mjs.map
30
+ //# sourceMappingURL=acorex-modules-conversation-mark-conversation-unread.command-O_zPrBQ0.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"acorex-modules-conversation-mark-conversation-unread.command-CZlsLAsb.mjs","sources":["../../../../libs/modules/conversation/src/lib/features/commands/mark-conversation-unread.command.ts"],"sourcesContent":["//#region ---- Imports ----\n\nimport { AXPExecuteCommandResult } from '@acorex/platform/contracts';\nimport { AXPCommand } from '@acorex/platform/runtime';\nimport { inject, Injectable } from '@angular/core';\n\nimport { AXMConversationEntityStoreService } from '../chat/services/conversation-entity-store.service';\n\n//#endregion\n\n//#region ---- Types ----\n\nexport interface AXMMarkConversationUnreadOptions {\n conversationId: string;\n}\n\n//#endregion\n\n//#region ---- Command ----\n\n@Injectable({ providedIn: 'root' })\nexport class AXMConversationMarkConversationUnreadCommand implements AXPCommand<AXMMarkConversationUnreadOptions, void> {\n private readonly store = inject(AXMConversationEntityStoreService);\n\n async execute(input: AXMMarkConversationUnreadOptions | unknown): Promise<AXPExecuteCommandResult<void>> {\n const options = input as AXMMarkConversationUnreadOptions;\n const conversation = await this.store.getConversation(options.conversationId);\n if (!conversation) {\n return { success: false };\n }\n const unreadCount = Math.max(1, conversation.unreadCount ?? 0);\n await this.store.setUnreadCount(options.conversationId, unreadCount);\n return { success: true };\n }\n}\n\n//#endregion\n"],"names":[],"mappings":";;;;AAgBA;AAEA;MAGa,4CAA4C,CAAA;AADzD,IAAA,WAAA,GAAA;AAEmB,QAAA,IAAA,CAAA,KAAK,GAAG,MAAM,CAAC,iCAAiC,CAAC;AAYnE,IAAA;IAVC,MAAM,OAAO,CAAC,KAAiD,EAAA;QAC7D,MAAM,OAAO,GAAG,KAAyC;AACzD,QAAA,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,OAAO,CAAC,cAAc,CAAC;QAC7E,IAAI,CAAC,YAAY,EAAE;AACjB,YAAA,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE;QAC3B;AACA,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,YAAY,CAAC,WAAW,IAAI,CAAC,CAAC;AAC9D,QAAA,MAAM,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,OAAO,CAAC,cAAc,EAAE,WAAW,CAAC;AACpE,QAAA,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE;IAC1B;8GAZW,4CAA4C,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAA5C,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,4CAA4C,cAD/B,MAAM,EAAA,CAAA,CAAA;;2FACnB,4CAA4C,EAAA,UAAA,EAAA,CAAA;kBADxD,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;;;"}
1
+ {"version":3,"file":"acorex-modules-conversation-mark-conversation-unread.command-O_zPrBQ0.mjs","sources":["../../../../libs/modules/conversation/src/lib/features/commands/mark-conversation-unread.command.ts"],"sourcesContent":["//#region ---- Imports ----\n\nimport { AXPExecuteCommandResult } from '@acorex/platform/contracts';\nimport { AXPCommand } from '@acorex/platform/runtime';\nimport { inject, Injectable } from '@angular/core';\n\nimport { AXMConversationEntityStoreService } from '../chat/services/conversation-entity-store.service';\n\n//#endregion\n\n//#region ---- Types ----\n\nexport interface AXMMarkConversationUnreadOptions {\n conversationId: string;\n}\n\n//#endregion\n\n//#region ---- Command ----\n\n@Injectable({ providedIn: 'root' })\nexport class AXMConversationMarkConversationUnreadCommand implements AXPCommand<AXMMarkConversationUnreadOptions, void> {\n private readonly store = inject(AXMConversationEntityStoreService);\n\n async execute(input: AXMMarkConversationUnreadOptions | unknown): Promise<AXPExecuteCommandResult<void>> {\n const options = input as AXMMarkConversationUnreadOptions;\n const conversation = await this.store.getConversation(options.conversationId);\n if (!conversation) {\n return { success: false };\n }\n const unreadCount = Math.max(1, conversation.unreadCount ?? 0);\n await this.store.setUnreadCount(options.conversationId, unreadCount);\n return { success: true };\n }\n}\n\n//#endregion\n"],"names":[],"mappings":";;;;AAgBA;AAEA;MAGa,4CAA4C,CAAA;AADzD,IAAA,WAAA,GAAA;AAEmB,QAAA,IAAA,CAAA,KAAK,GAAG,MAAM,CAAC,iCAAiC,CAAC;AAYnE,IAAA;IAVC,MAAM,OAAO,CAAC,KAAiD,EAAA;QAC7D,MAAM,OAAO,GAAG,KAAyC;AACzD,QAAA,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,OAAO,CAAC,cAAc,CAAC;QAC7E,IAAI,CAAC,YAAY,EAAE;AACjB,YAAA,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE;QAC3B;AACA,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,YAAY,CAAC,WAAW,IAAI,CAAC,CAAC;AAC9D,QAAA,MAAM,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,OAAO,CAAC,cAAc,EAAE,WAAW,CAAC;AACpE,QAAA,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE;IAC1B;8GAZW,4CAA4C,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAA5C,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,4CAA4C,cAD/B,MAAM,EAAA,CAAA,CAAA;;2FACnB,4CAA4C,EAAA,UAAA,EAAA,CAAA;kBADxD,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;;;"}
@@ -1,6 +1,6 @@
1
1
  import * as i0 from '@angular/core';
2
2
  import { inject, Injectable } from '@angular/core';
3
- import { c as AXM_CONVERSATION_ASSIST_RESPONSE_PORT } from './acorex-modules-conversation-acorex-modules-conversation-B_JcAHvL.mjs';
3
+ import { c as AXM_CONVERSATION_ASSIST_RESPONSE_PORT } from './acorex-modules-conversation-acorex-modules-conversation-Dc8te-PO.mjs';
4
4
 
5
5
  //#endregion
6
6
  //#region ---- Command ----
@@ -31,4 +31,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
31
31
  }] });
32
32
 
33
33
  export { AXMConversationRetryAssistResponseCommand };
34
- //# sourceMappingURL=acorex-modules-conversation-retry-assist-response.command-Cly1-RKt.mjs.map
34
+ //# sourceMappingURL=acorex-modules-conversation-retry-assist-response.command-DsB-CP3R.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"acorex-modules-conversation-retry-assist-response.command-Cly1-RKt.mjs","sources":["../../../../libs/modules/conversation/src/lib/features/commands/retry-assist-response.command.ts"],"sourcesContent":["//#region ---- Imports ----\n\nimport type { AXMessage } from '@acorex/components/conversation2';\nimport { AXPExecuteCommandResult } from '@acorex/platform/contracts';\nimport { AXPCommand } from '@acorex/platform/runtime';\nimport { Injectable, inject } from '@angular/core';\n\nimport { AXM_CONVERSATION_ASSIST_RESPONSE_PORT } from '../chat/services/conversation-assist-response.port';\n\n//#endregion\n\n//#region ---- Types ----\n\nexport interface AXMRetryAssistResponseOptions {\n conversationId: string;\n messageId: string;\n}\n\nexport interface AXMRetryAssistResponseResult {\n message: AXMessage;\n}\n\n//#endregion\n\n//#region ---- Command ----\n\n@Injectable({ providedIn: 'root' })\nexport class AXMConversationRetryAssistResponseCommand\n implements AXPCommand<AXMRetryAssistResponseOptions, AXMRetryAssistResponseResult>\n{\n private readonly assistResponse = inject(AXM_CONVERSATION_ASSIST_RESPONSE_PORT, { optional: true });\n\n async execute(input: AXMRetryAssistResponseOptions | unknown): Promise<AXPExecuteCommandResult<AXMRetryAssistResponseResult>> {\n const options = input as AXMRetryAssistResponseOptions;\n if (!this.assistResponse) {\n return { success: false, message: { text: 'Assist response service is not available.' } };\n }\n\n try {\n const message = await this.assistResponse.retryAssistResponse(options.conversationId, options.messageId);\n return { success: true, data: { message } };\n } catch (error: unknown) {\n console.error('[Conversation:RetryAssistResponse] Failed:', error);\n return { success: false };\n }\n }\n}\n\n//#endregion\n"],"names":[],"mappings":";;;;AAsBA;AAEA;MAGa,yCAAyC,CAAA;AADtD,IAAA,WAAA,GAAA;QAImB,IAAA,CAAA,cAAc,GAAG,MAAM,CAAC,qCAAqC,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AAgBpG,IAAA;IAdC,MAAM,OAAO,CAAC,KAA8C,EAAA;QAC1D,MAAM,OAAO,GAAG,KAAsC;AACtD,QAAA,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE;AACxB,YAAA,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,2CAA2C,EAAE,EAAE;QAC3F;AAEA,QAAA,IAAI;AACF,YAAA,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,mBAAmB,CAAC,OAAO,CAAC,cAAc,EAAE,OAAO,CAAC,SAAS,CAAC;YACxG,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,EAAE;QAC7C;QAAE,OAAO,KAAc,EAAE;AACvB,YAAA,OAAO,CAAC,KAAK,CAAC,4CAA4C,EAAE,KAAK,CAAC;AAClE,YAAA,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE;QAC3B;IACF;8GAlBW,yCAAyC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAzC,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,yCAAyC,cAD5B,MAAM,EAAA,CAAA,CAAA;;2FACnB,yCAAyC,EAAA,UAAA,EAAA,CAAA;kBADrD,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;;;"}
1
+ {"version":3,"file":"acorex-modules-conversation-retry-assist-response.command-DsB-CP3R.mjs","sources":["../../../../libs/modules/conversation/src/lib/features/commands/retry-assist-response.command.ts"],"sourcesContent":["//#region ---- Imports ----\n\nimport type { AXMessage } from '@acorex/components/conversation2';\nimport { AXPExecuteCommandResult } from '@acorex/platform/contracts';\nimport { AXPCommand } from '@acorex/platform/runtime';\nimport { Injectable, inject } from '@angular/core';\n\nimport { AXM_CONVERSATION_ASSIST_RESPONSE_PORT } from '../chat/services/conversation-assist-response.port';\n\n//#endregion\n\n//#region ---- Types ----\n\nexport interface AXMRetryAssistResponseOptions {\n conversationId: string;\n messageId: string;\n}\n\nexport interface AXMRetryAssistResponseResult {\n message: AXMessage;\n}\n\n//#endregion\n\n//#region ---- Command ----\n\n@Injectable({ providedIn: 'root' })\nexport class AXMConversationRetryAssistResponseCommand\n implements AXPCommand<AXMRetryAssistResponseOptions, AXMRetryAssistResponseResult>\n{\n private readonly assistResponse = inject(AXM_CONVERSATION_ASSIST_RESPONSE_PORT, { optional: true });\n\n async execute(input: AXMRetryAssistResponseOptions | unknown): Promise<AXPExecuteCommandResult<AXMRetryAssistResponseResult>> {\n const options = input as AXMRetryAssistResponseOptions;\n if (!this.assistResponse) {\n return { success: false, message: { text: 'Assist response service is not available.' } };\n }\n\n try {\n const message = await this.assistResponse.retryAssistResponse(options.conversationId, options.messageId);\n return { success: true, data: { message } };\n } catch (error: unknown) {\n console.error('[Conversation:RetryAssistResponse] Failed:', error);\n return { success: false };\n }\n }\n}\n\n//#endregion\n"],"names":[],"mappings":";;;;AAsBA;AAEA;MAGa,yCAAyC,CAAA;AADtD,IAAA,WAAA,GAAA;QAImB,IAAA,CAAA,cAAc,GAAG,MAAM,CAAC,qCAAqC,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AAgBpG,IAAA;IAdC,MAAM,OAAO,CAAC,KAA8C,EAAA;QAC1D,MAAM,OAAO,GAAG,KAAsC;AACtD,QAAA,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE;AACxB,YAAA,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,2CAA2C,EAAE,EAAE;QAC3F;AAEA,QAAA,IAAI;AACF,YAAA,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,mBAAmB,CAAC,OAAO,CAAC,cAAc,EAAE,OAAO,CAAC,SAAS,CAAC;YACxG,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,EAAE;QAC7C;QAAE,OAAO,KAAc,EAAE;AACvB,YAAA,OAAO,CAAC,KAAK,CAAC,4CAA4C,EAAE,KAAK,CAAC;AAClE,YAAA,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE;QAC3B;IACF;8GAlBW,yCAAyC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAzC,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,yCAAyC,cAD5B,MAAM,EAAA,CAAA,CAAA;;2FACnB,yCAAyC,EAAA,UAAA,EAAA,CAAA;kBADrD,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;;;"}