fmode-ng 0.0.113 → 0.0.115

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 (275) hide show
  1. package/LICENSE.md +8 -0
  2. package/README.md +37 -37
  3. package/esm2022/fmode-ng.mjs +10 -5
  4. package/esm2022/lib/aigc/agent/fm-agent-task/fm-agent-task.component.mjs +8 -92
  5. package/esm2022/lib/aigc/agent/index.mjs +10 -3
  6. package/esm2022/lib/aigc/avatar/avatar.module.mjs +10 -45
  7. package/esm2022/lib/aigc/avatar/comp-avatar-particle/avatar.role.mjs +10 -2
  8. package/esm2022/lib/aigc/avatar/comp-avatar-particle/comp-avatar-particle.component.mjs +10 -315
  9. package/esm2022/lib/aigc/avatar/comp-avatar-particle/index.mjs +10 -3
  10. package/esm2022/lib/aigc/avatar/comp-avatar-particle/role-points.class.mjs +10 -57
  11. package/esm2022/lib/aigc/avatar/comp-avatar-role-image/comp-avatar-role-image.component.mjs +10 -98
  12. package/esm2022/lib/aigc/avatar/comp-avatar-role-video/comp-avatar-role-video.component.mjs +10 -107
  13. package/esm2022/lib/aigc/avatar/comp-avatar-talk/comp-avatar-talk.component.mjs +10 -113
  14. package/esm2022/lib/aigc/avatar/index.mjs +10 -8
  15. package/esm2022/lib/aigc/avatar/interface-avatar-role.mjs +10 -2
  16. package/esm2022/lib/aigc/avatar/modal-chat-voice-input/modal-chat-voice-input.component.mjs +8 -164
  17. package/esm2022/lib/aigc/chat/chat-header-area/comp-header-area.component.mjs +10 -49
  18. package/esm2022/lib/aigc/chat/chat-header-area/index.mjs +10 -2
  19. package/esm2022/lib/aigc/chat/chat-list/chat-list.component.mjs +8 -155
  20. package/esm2022/lib/aigc/chat/chat-list/index.mjs +10 -2
  21. package/esm2022/lib/aigc/chat/chat-message-area/comp-message-area.component.mjs +10 -40
  22. package/esm2022/lib/aigc/chat/chat-message-area/index.mjs +10 -2
  23. package/esm2022/lib/aigc/chat/chat-message-card/comp-message-card.component.mjs +10 -140
  24. package/esm2022/lib/aigc/chat/chat-message-card/duration-str.pipe.mjs +10 -29
  25. package/esm2022/lib/aigc/chat/chat-message-card/index.mjs +10 -3
  26. package/esm2022/lib/aigc/chat/chat-modal-input/index.mjs +10 -3
  27. package/esm2022/lib/aigc/chat/chat-modal-input/modal-audio-message/modal-audio-message.component.mjs +8 -193
  28. package/esm2022/lib/aigc/chat/chat-modal-input/modal-input.component.mjs +10 -331
  29. package/esm2022/lib/aigc/chat/chat-panel/chat-panel.component.mjs +8 -249
  30. package/esm2022/lib/aigc/chat/comp-role-prompt/comp-role-prompt.component.mjs +10 -83
  31. package/esm2022/lib/aigc/chat/comp-role-prompt/index.mjs +10 -2
  32. package/esm2022/lib/aigc/chat/index.mjs +10 -8
  33. package/esm2022/lib/aigc/comp-markdown-preview/clipboard.service.mjs +10 -82
  34. package/esm2022/lib/aigc/comp-markdown-preview/markdown-parse.mjs +8 -367
  35. package/esm2022/lib/aigc/comp-markdown-preview/markdown-preview.component.mjs +10 -51
  36. package/esm2022/lib/aigc/comp-markdown-preview/markdown-preview.module.mjs +10 -24
  37. package/esm2022/lib/aigc/comp-markdown-preview/plugins/md-mathjax/index.mjs +10 -115
  38. package/esm2022/lib/aigc/index.mjs +10 -14
  39. package/esm2022/lib/aigc/service-fmai/fmai.service.mjs +10 -21
  40. package/esm2022/lib/aigc/service-fmai/service-chat/chat-class.mjs +10 -2
  41. package/esm2022/lib/aigc/service-fmai/service-chat/chat.service.mjs +8 -174
  42. package/esm2022/lib/aigc/service-fmai/service-chat/index.mjs +10 -7
  43. package/esm2022/lib/aigc/service-fmai/service-chat/mask-list.mjs +9 -194
  44. package/esm2022/lib/aigc/service-fmai/service-chat/pipes/chat-content.pipe.mjs +10 -27
  45. package/esm2022/lib/aigc/service-fmai/service-chat/pipes/hidexml.pipe.mjs +10 -27
  46. package/esm2022/lib/aigc/service-fmai/service-chat/utilnow.pipe.mjs +10 -68
  47. package/esm2022/lib/aigc/service-fmai/service-imagine/imagine-func.mjs +9 -162
  48. package/esm2022/lib/aigc/service-fmai/service-imagine/imagine-work.mjs +10 -68
  49. package/esm2022/lib/aigc/service-fmai/service-imagine/imagine.service.mjs +8 -313
  50. package/esm2022/lib/aigc/service-fmai/service-imagine/index.mjs +10 -4
  51. package/esm2022/lib/aigc/story/fm-office-viewer/fm-office-viewer.component.mjs +10 -62
  52. package/esm2022/lib/aigc/story/fm-story-card/fm-story-card.component.mjs +10 -87
  53. package/esm2022/lib/aigc/story/fm-story-list/fm-story-list.component.mjs +10 -345
  54. package/esm2022/lib/aigc/story/fm-story-list/story-preview.mjs +10 -81
  55. package/esm2022/lib/aigc/story/fm-story-loader/fm-story-loader.component.mjs +10 -152
  56. package/esm2022/lib/aigc/story/fm-story-splitter/fm-story-splitter.component.mjs +10 -42
  57. package/esm2022/lib/aigc/story/index.mjs +10 -6
  58. package/esm2022/lib/aigc/story/modal-chat-story/comp-chat-story-json/comp-chat-story-json.component.mjs +10 -47
  59. package/esm2022/lib/aigc/story/modal-chat-story/comp-diary-story/comp-diary-story.component.mjs +10 -95
  60. package/esm2022/lib/aigc/story/modal-chat-story/modal-chat-story.component.mjs +10 -253
  61. package/esm2022/lib/aigc/story/story.service.mjs +10 -35
  62. package/esm2022/lib/aigc/voice/fmode-voice.service.mjs +10 -636
  63. package/esm2022/lib/aigc/voice/index.mjs +10 -7
  64. package/esm2022/lib/aigc/voice/lib/audio/audio.player.mjs +10 -55
  65. package/esm2022/lib/aigc/voice/lib/audio/audio.streamer.mjs +10 -2
  66. package/esm2022/lib/aigc/voice/lib/audio/streamer.microsoft.mjs +10 -96
  67. package/esm2022/lib/aigc/voice/lib/audio/streamer.pcm.mjs +8 -177
  68. package/esm2022/lib/aigc/voice/lib/pcm2wav.mjs +10 -38
  69. package/esm2022/lib/aigc/voice/lib/recorder/extension-waveview.mjs +10 -215
  70. package/esm2022/lib/aigc/voice/lib/resample.mjs +10 -34
  71. package/esm2022/lib/aigc/voice/tts/fmode-tts-class.mjs +10 -189
  72. package/esm2022/lib/aigc/voice/tts/index.mjs +10 -5
  73. package/esm2022/lib/aigc/voice/tts/int-tts-provider.mjs +10 -2
  74. package/esm2022/lib/aigc/voice/tts/provider-doubao.mjs +8 -346
  75. package/esm2022/lib/code/fm-codemirror/fm-codemirror.component.mjs +8 -342
  76. package/esm2022/lib/code/index.mjs +10 -2
  77. package/esm2022/lib/core/agent/chat/completion/fmode-completion.mjs +8 -430
  78. package/esm2022/lib/core/agent/chat/completion/index.mjs +10 -2
  79. package/esm2022/lib/core/agent/chat/completion/int-gpt-chat-options.mjs +10 -2
  80. package/esm2022/lib/core/agent/chat/fmode-chat.mjs +8 -617
  81. package/esm2022/lib/core/agent/chat/index.mjs +10 -4
  82. package/esm2022/lib/core/agent/chat/interface.mjs +10 -2
  83. package/esm2022/lib/core/agent/index.mjs +10 -6
  84. package/esm2022/lib/core/agent/prompt/agent.prompt.mjs +10 -133
  85. package/esm2022/lib/core/agent/prompt/index.mjs +10 -2
  86. package/esm2022/lib/core/agent/prompt/prompt-util.mjs +10 -16
  87. package/esm2022/lib/core/agent/story/agent.story.mjs +10 -64
  88. package/esm2022/lib/core/agent/story/index.mjs +10 -2
  89. package/esm2022/lib/core/agent/task/agent.task.mjs +10 -90
  90. package/esm2022/lib/core/agent/task/index.mjs +10 -2
  91. package/esm2022/lib/core/agent/waiting/index.mjs +10 -3
  92. package/esm2022/lib/core/agent/waiting/loading/loading.ctrl.mjs +10 -279
  93. package/esm2022/lib/core/agent/waiting/tips/tips.ctrl.mjs +8 -190
  94. package/esm2022/lib/core/index.mjs +10 -4
  95. package/esm2022/lib/core/parse/datatype/acl.mjs +10 -57
  96. package/esm2022/lib/core/parse/datatype/file.mjs +10 -69
  97. package/esm2022/lib/core/parse/datatype/geopoint.mjs +10 -57
  98. package/esm2022/lib/core/parse/datatype/relation.mjs +10 -56
  99. package/esm2022/lib/core/parse/fmode.cloud.mjs +10 -0
  100. package/esm2022/lib/core/parse/fmode.object.mjs +10 -232
  101. package/esm2022/lib/core/parse/fmode.parse.mjs +10 -84
  102. package/esm2022/lib/core/parse/fmode.query.mjs +8 -500
  103. package/esm2022/lib/core/parse/fmode.user.mjs +10 -275
  104. package/esm2022/lib/core/parse/index.mjs +10 -5
  105. package/esm2022/lib/core/parse/types.mjs +10 -2
  106. package/esm2022/lib/core/voice/index.mjs +10 -3
  107. package/esm2022/lib/core/voice/tts/index.mjs +10 -2
  108. package/esm2022/lib/icon/filetype/audio.svg.mjs +10 -3
  109. package/esm2022/lib/icon/filetype/avatar.svg.mjs +10 -14
  110. package/esm2022/lib/icon/filetype/chat.svg.mjs +10 -3
  111. package/esm2022/lib/icon/filetype/docx.svg.mjs +10 -3
  112. package/esm2022/lib/icon/filetype/file.svg.mjs +10 -3
  113. package/esm2022/lib/icon/filetype/filetype.pipe.mjs +10 -57
  114. package/esm2022/lib/icon/filetype/index.mjs +10 -12
  115. package/esm2022/lib/icon/filetype/md.svg.mjs +10 -3
  116. package/esm2022/lib/icon/filetype/pdf.svg.mjs +10 -3
  117. package/esm2022/lib/icon/filetype/pptx.svg.mjs +10 -3
  118. package/esm2022/lib/icon/filetype/svgtoblob.mjs +10 -8
  119. package/esm2022/lib/icon/filetype/video.svg.mjs +10 -3
  120. package/esm2022/lib/icon/filetype/xlsx.svg.mjs +10 -3
  121. package/esm2022/lib/icon/index.mjs +10 -2
  122. package/esm2022/lib/map/comp-poi-picker/comp-poi-picker.component.mjs +10 -209
  123. package/esm2022/lib/map/comp-poi-picker/comp-poi-picker.module.mjs +10 -33
  124. package/esm2022/lib/map/index.mjs +10 -4
  125. package/esm2022/lib/map/map.module.mjs +10 -61
  126. package/esm2022/lib/map/page-loca-scatter/page-loca-scatter.component.mjs +10 -132
  127. package/esm2022/lib/map/page-map.start/page-map.start.component.mjs +8 -115
  128. package/esm2022/lib/map/page-plan-route/page-plan-route.component.mjs +8 -118
  129. package/esm2022/lib/nova-cloud/index.mjs +10 -3
  130. package/esm2022/lib/nova-cloud/ncloud-api-func.mjs +10 -91
  131. package/esm2022/lib/nova-cloud/nova-cloud.service.mjs +10 -53
  132. package/esm2022/lib/payment/index.mjs +10 -2
  133. package/esm2022/lib/payment/payment/payment.component.mjs +10 -543
  134. package/esm2022/lib/payment/payment.service.mjs +10 -202
  135. package/esm2022/lib/person/comp-person-gender-icon/comp-person-gender-icon.component.mjs +10 -48
  136. package/esm2022/lib/person/comp-person-item/comp-person-item.component.mjs +10 -29
  137. package/esm2022/lib/person/comp-person-story/comp-person-story.component.mjs +10 -211
  138. package/esm2022/lib/person/edit-upload/edit-upload.component.mjs +8 -412
  139. package/esm2022/lib/person/edit-upload/edit-upload.module.mjs +10 -50
  140. package/esm2022/lib/person/index.mjs +10 -5
  141. package/esm2022/lib/person/modal-person-select/modal-person-select.component.mjs +10 -144
  142. package/esm2022/lib/person/modal-user-verify/secret-text.pipe.mjs +10 -41
  143. package/esm2022/lib/person/modal-user-verify/user-verify.component.mjs +10 -595
  144. package/esm2022/lib/person/person-detail/person-detail.component.mjs +10 -172
  145. package/esm2022/lib/person/person.service.mjs +8 -193
  146. package/esm2022/lib/platform/cross.service.mjs +10 -62
  147. package/esm2022/lib/platform/index.mjs +10 -2
  148. package/esm2022/lib/social/index.mjs +10 -2
  149. package/esm2022/lib/social/wechat/wechat-jssdk.service.mjs +8 -230
  150. package/esm2022/lib/storage/comp-hwobs-manager/hwobs-manager.component.mjs +10 -59
  151. package/esm2022/lib/storage/index.mjs +10 -5
  152. package/esm2022/lib/storage/service-hwobs/hwobs.service.mjs +8 -131
  153. package/esm2022/lib/storage/service-hwobs/index.mjs +10 -3
  154. package/esm2022/lib/storage/service-hwobs/typings/esdk-obs-browser.mjs +1 -1
  155. package/esm2022/lib/storage/service-upload/index.mjs +10 -2
  156. package/esm2022/lib/storage/service-upload/nova-upload.service.mjs +8 -513
  157. package/esm2022/lib/storage/service-upload/util-file-md5.mjs +10 -28
  158. package/esm2022/lib/storage/service-upload/util-file-metadata.mjs +10 -93
  159. package/esm2022/lib/storage/storage.module.mjs +10 -42
  160. package/esm2022/lib/text/fm-article-editor/article-editor-topbar/article-editor-topbar.component.mjs +10 -72
  161. package/esm2022/lib/text/fm-article-editor/article.service.mjs +10 -237
  162. package/esm2022/lib/text/fm-article-editor/comp-upload-book-banners/comp-upload-book-banners.component.mjs +8 -72
  163. package/esm2022/lib/text/fm-article-editor/draft.service.mjs +10 -207
  164. package/esm2022/lib/text/fm-article-editor/fm-article-aitool/fm-article-aitool.component.mjs +8 -227
  165. package/esm2022/lib/text/fm-article-editor/fm-article-draft/fm-article-draft.component.mjs +10 -303
  166. package/esm2022/lib/text/fm-article-editor/fm-article-editor.component.mjs +8 -371
  167. package/esm2022/lib/text/fm-article-editor/fm-article-outline/fm-article-outline.component.mjs +10 -94
  168. package/esm2022/lib/text/fm-article-editor/fm-article-outline-leftitem/fm-article-outline-leftitem.component.mjs +10 -36
  169. package/esm2022/lib/text/fm-article-editor/fm-article-preview/fm-article-preview.component.mjs +10 -281
  170. package/esm2022/lib/text/fm-article-editor/fm-article-write-options/fm-article-write-options.component.mjs +10 -72
  171. package/esm2022/lib/text/fm-article-editor/outline-count.pipe.mjs +10 -22
  172. package/esm2022/lib/text/fm-article-editor/prompt/prompt-insertion-article.mjs +10 -169
  173. package/esm2022/lib/text/fm-article-editor/task-article-generation.mjs +10 -69
  174. package/esm2022/lib/text/fm-article-editor/tasks/task-article-draft-create.mjs +10 -65
  175. package/esm2022/lib/text/fm-article-editor/tasks/task-article-outline-edit.mjs +10 -55
  176. package/esm2022/lib/text/fm-article-editor/tasks/task-article-outline.mjs +10 -142
  177. package/esm2022/lib/text/fm-article-editor/tasks/task-article-preview.mjs +10 -35
  178. package/esm2022/lib/text/fm-article-editor/tasks/task-article-writing-options.mjs +10 -81
  179. package/esm2022/lib/text/fm-article-editor/tasks/task-document-select.mjs +10 -50
  180. package/esm2022/lib/text/fm-text-quill/fm-text-quill.component.mjs +10 -145
  181. package/esm2022/lib/text/index.mjs +10 -4
  182. package/esm2022/lib/user/account/account.service.mjs +10 -222
  183. package/esm2022/lib/user/captcha/captcha.component.mjs +10 -135
  184. package/esm2022/lib/user/comp-user-avatar/comp-user-avatar.component.mjs +10 -66
  185. package/esm2022/lib/user/index.mjs +10 -17
  186. package/esm2022/lib/user/login/auth.guard.mjs +10 -28
  187. package/esm2022/lib/user/login/auth.service.mjs +8 -433
  188. package/esm2022/lib/user/login/login.component.mjs +10 -916
  189. package/esm2022/lib/user/modal-user-login/modal-user-login.component.mjs +10 -311
  190. package/esm2022/lib/user/profile/auth-profile.guard.mjs +10 -27
  191. package/esm2022/lib/user/profile/auth-profile.service.mjs +10 -122
  192. package/esm2022/lib/user/profile/profile-bind/profile-bind.component.mjs +10 -164
  193. package/esm2022/lib/user/profile/profile-bind/profile-confirm-modal.component.mjs +10 -79
  194. package/esm2022/lib/user/profile/profile.module.mjs +10 -54
  195. package/esm2022/lib/user/staff/index.mjs +10 -4
  196. package/esm2022/lib/user/staff/staff.guard.mjs +10 -26
  197. package/esm2022/lib/user/staff/staff.module.mjs +10 -18
  198. package/esm2022/lib/user/staff/staff.service.mjs +10 -85
  199. package/esm2022/lib/user/user-name.pipe.mjs +10 -29
  200. package/esm2022/lib/user/user.module.mjs +10 -102
  201. package/esm2022/lib/video/fm-video/fm-video.component.mjs +10 -67
  202. package/esm2022/lib/video/index.mjs +10 -2
  203. package/esm2022/public-api.mjs +10 -21
  204. package/fesm2022/fmode-ng.mjs +7 -19788
  205. package/fesm2022/fmode-ng.mjs.map +1 -1
  206. package/lib/aigc/avatar/comp-avatar-role-image/comp-avatar-role-image.component.d.ts +2 -2
  207. package/lib/aigc/avatar/comp-avatar-role-video/comp-avatar-role-video.component.d.ts +2 -2
  208. package/lib/aigc/avatar/comp-avatar-talk/comp-avatar-talk.component.d.ts +2 -2
  209. package/lib/aigc/chat/chat-list/chat-list.component.d.ts +3 -2
  210. package/lib/aigc/chat/chat-message-card/comp-message-card.component.d.ts +3 -3
  211. package/lib/aigc/chat/chat-modal-input/modal-audio-message/modal-audio-message.component.d.ts +2 -2
  212. package/lib/aigc/chat/chat-modal-input/modal-input.component.d.ts +3 -3
  213. package/lib/aigc/service-fmai/service-imagine/imagine-func.d.ts +3 -3
  214. package/lib/aigc/service-fmai/service-imagine/imagine-work.d.ts +4 -4
  215. package/lib/aigc/service-fmai/service-imagine/imagine.service.d.ts +6 -6
  216. package/lib/aigc/story/fm-office-viewer/fm-office-viewer.component.d.ts +2 -2
  217. package/lib/aigc/story/fm-story-card/fm-story-card.component.d.ts +2 -1
  218. package/lib/aigc/story/fm-story-list/fm-story-list.component.d.ts +6 -6
  219. package/lib/aigc/story/fm-story-list/story-preview.d.ts +4 -4
  220. package/lib/aigc/story/fm-story-loader/fm-story-loader.component.d.ts +3 -3
  221. package/lib/aigc/story/fm-story-splitter/fm-story-splitter.component.d.ts +2 -2
  222. package/lib/aigc/story/modal-chat-story/comp-chat-story-json/comp-chat-story-json.component.d.ts +3 -2
  223. package/lib/aigc/story/modal-chat-story/comp-diary-story/comp-diary-story.component.d.ts +3 -2
  224. package/lib/aigc/story/modal-chat-story/modal-chat-story.component.d.ts +6 -6
  225. package/lib/aigc/story/story.service.d.ts +3 -2
  226. package/lib/aigc/voice/tts/fmode-tts-class.d.ts +2 -2
  227. package/lib/core/agent/chat/fmode-chat.d.ts +11 -11
  228. package/lib/core/agent/story/agent.story.d.ts +8 -8
  229. package/lib/core/parse/datatype/geopoint.d.ts +5 -1
  230. package/lib/core/parse/fmode.cloud.d.ts +32 -0
  231. package/lib/core/parse/fmode.object.d.ts +2 -2
  232. package/lib/core/parse/fmode.parse.d.ts +15 -9
  233. package/lib/core/parse/fmode.query.d.ts +41 -2
  234. package/lib/core/parse/fmode.user.d.ts +1 -0
  235. package/lib/core/parse/index.d.ts +1 -0
  236. package/lib/core/parse/types.d.ts +2 -0
  237. package/lib/map/comp-poi-picker/comp-poi-picker.component.d.ts +5 -5
  238. package/lib/payment/payment/payment.component.d.ts +3 -3
  239. package/lib/payment/payment.service.d.ts +4 -4
  240. package/lib/person/comp-person-gender-icon/comp-person-gender-icon.component.d.ts +2 -1
  241. package/lib/person/comp-person-item/comp-person-item.component.d.ts +2 -1
  242. package/lib/person/comp-person-story/comp-person-story.component.d.ts +13 -13
  243. package/lib/person/edit-upload/edit-upload.component.d.ts +1 -1
  244. package/lib/person/modal-person-select/modal-person-select.component.d.ts +5 -5
  245. package/lib/person/modal-user-verify/user-verify.component.d.ts +5 -5
  246. package/lib/person/person-detail/person-detail.component.d.ts +4 -4
  247. package/lib/person/person.service.d.ts +7 -7
  248. package/lib/storage/service-hwobs/hwobs.service.d.ts +4 -5
  249. package/lib/storage/service-upload/nova-upload.service.d.ts +5 -5
  250. package/lib/text/fm-article-editor/article-editor-topbar/article-editor-topbar.component.d.ts +2 -1
  251. package/lib/text/fm-article-editor/article.service.d.ts +12 -12
  252. package/lib/text/fm-article-editor/draft.service.d.ts +5 -5
  253. package/lib/text/fm-article-editor/fm-article-aitool/fm-article-aitool.component.d.ts +3 -2
  254. package/lib/text/fm-article-editor/fm-article-draft/fm-article-draft.component.d.ts +16 -17
  255. package/lib/text/fm-article-editor/fm-article-editor.component.d.ts +3 -3
  256. package/lib/text/fm-article-editor/fm-article-outline/fm-article-outline.component.d.ts +11 -10
  257. package/lib/text/fm-article-editor/fm-article-preview/fm-article-preview.component.d.ts +2 -2
  258. package/lib/text/fm-article-editor/prompt/prompt-insertion-article.d.ts +3 -3
  259. package/lib/text/fm-article-editor/task-article-generation.d.ts +5 -4
  260. package/lib/text/fm-article-editor/tasks/task-article-draft-create.d.ts +3 -3
  261. package/lib/text/fm-article-editor/tasks/task-article-outline-edit.d.ts +3 -3
  262. package/lib/text/fm-article-editor/tasks/task-article-outline.d.ts +3 -3
  263. package/lib/text/fm-article-editor/tasks/task-article-preview.d.ts +2 -1
  264. package/lib/text/fm-article-editor/tasks/task-article-writing-options.d.ts +3 -3
  265. package/lib/text/fm-article-editor/tasks/task-document-select.d.ts +3 -3
  266. package/lib/user/account/account.service.d.ts +2 -2
  267. package/lib/user/comp-user-avatar/comp-user-avatar.component.d.ts +2 -2
  268. package/lib/user/login/auth.service.d.ts +5 -5
  269. package/lib/user/login/login.component.d.ts +3 -3
  270. package/lib/user/profile/auth-profile.service.d.ts +8 -8
  271. package/lib/user/profile/profile-bind/profile-bind.component.d.ts +7 -7
  272. package/lib/user/profile/profile-bind/profile-confirm-modal.component.d.ts +2 -2
  273. package/lib/user/staff/staff.service.d.ts +3 -3
  274. package/lib/user/user-name.pipe.d.ts +2 -2
  275. package/package.json +12 -18
@@ -1,207 +1,10 @@
1
- import { Injectable } from '@angular/core';
2
- import { FmodeChatCompletion } from '../../aigc';
3
- import Parse from "parse";
4
- import { finalize, from } from 'rxjs';
5
- import { AgentPrompt } from '../../core';
6
- import { PersonService } from '../../person/person.service';
7
- import { PromptInsertionDocumentList, PromptInsertionRoleList } from './prompt/prompt-insertion-article';
8
- import * as i0 from "@angular/core";
9
- import * as i1 from "../../person/person.service";
10
- const agentPrompt = new AgentPrompt();
11
- var PromptTplArticleSectionCode = "article-section-create-tpl";
12
- export class DraftService {
13
- constructor(personServ) {
14
- this.personServ = personServ;
15
- this.DraftListMap = {};
16
- this.DraftCountMap = {};
17
- this.total = 0;
18
- this.aiCount = 0;
19
- this.draftCount = 0;
20
- }
21
- async loadArticleDraft(article) {
22
- if (!article?.id)
23
- return;
24
- let query = new Parse.Query("ArticleDraft");
25
- query.equalTo("article", article?.id);
26
- query.addDescending("updatedAt");
27
- query.notEqualTo("isDeleted", true);
28
- this.DraftListMap[article?.id] = await query.find();
29
- if (!this.DraftCountMap[article.id])
30
- this.DraftCountMap[article.id] = {};
31
- this.DraftCountMap[article.id].total = this.DraftListMap[article?.id]?.length;
32
- this.DraftCountMap[article.id].aiCount = this.DraftListMap[article?.id].filter(item => item?.get("type") == "ai")?.length;
33
- this.DraftCountMap[article.id].draftCount = this.total - this.aiCount;
34
- }
35
- async newSectionCreate(params) {
36
- let outlineJson = params?.draft?.get("outlineJson");
37
- let section = outlineJson?.sections?.[params?.sectionIndex];
38
- // console.log(outlineJson,section)
39
- // 拼接提示词
40
- let options = params.writingOptions;
41
- options.title = section?.title; // 章节标题
42
- options.outline = "";
43
- options.skill = "";
44
- options.case = "";
45
- options.count = "";
46
- options.writtingPerson = options.writtingPerson || "第三人称";
47
- // 拼接主人公
48
- options.personName = params?.person?.get("name") || "";
49
- options.personGender = params?.person?.get("gender") || "";
50
- // console.log(params?.person?.toJSON(),options)
51
- // if(!params?.person?.id){
52
- // return new Subscription();
53
- // }
54
- if (section?.outline)
55
- options.outline = `,主要内容:${section?.outline}.`;
56
- if (section?.skill)
57
- options.skill = `,写作技巧:${section?.skill}.`;
58
- if (section?.case)
59
- options.case = `,细节案例:${section?.case}.`;
60
- if (section?.count)
61
- options.count = `,总字数达${section?.count || 2000}以上.`;
62
- if (params?.contentArray?.length) {
63
- let sections = outlineJson?.sections || [];
64
- let content = sections.map((item, index) => { return `# ${item.title}\n${params?.contentArray?.[index]?.content || '待完成'}\n`; })?.join("\n");
65
- options.createdContent = "\n已编写内容:\n" + content + "\n";
66
- }
67
- let draftPrompt = await agentPrompt.getFormatTpl(PromptTplArticleSectionCode, options);
68
- // draftPrompt = `\n您是一名资深的作家和网络编辑,请您参考知识文档,角色关系,写出“${section?.title}”部分,其中`
69
- // if(section?.outline) draftPrompt += `主要内容:${section?.outline}.`
70
- // if(section?.skill) draftPrompt += `写作技巧:${section?.skill}.`
71
- // if(section?.case) draftPrompt += `细节案例:${section?.case}.`
72
- // draftPrompt += `总字数达${section?.count||2000}以上.`
73
- // 拼接相关提示词
74
- // 仅加载章节相关文档
75
- let storyList = [];
76
- if (section?.docList?.length > 0) {
77
- let query = new Parse.Query("Document");
78
- query.notEqualTo("isDeleted", true);
79
- query.containedIn("objectId", section?.docList);
80
- let sectionDocList = await query?.find();
81
- if (sectionDocList?.length > 0) {
82
- params.documentList = sectionDocList;
83
- }
84
- let querys = new Parse.Query("Story");
85
- querys.include("chatSession", "person", "recorder", "user");
86
- querys.notEqualTo("isDeleted", true);
87
- querys.containedIn("objectId", section?.docList);
88
- storyList = await querys?.find();
89
- }
90
- // 相关角色列表、知识文档
91
- let roleList;
92
- let docsRowList;
93
- if (params.documentList?.length || storyList?.length) {
94
- try {
95
- roleList = await PromptInsertionRoleList(params.documentList, storyList);
96
- }
97
- catch (err) {
98
- console.error("PromptInsertionRoleList", err);
99
- }
100
- try {
101
- docsRowList = await PromptInsertionDocumentList(params.documentList, storyList, this.personServ);
102
- // console.log("docsRowList insert return",docsRowList)
103
- }
104
- catch (err) {
105
- console.error("PromptInsertionDocumentList", err);
106
- }
107
- }
108
- // 插入片段
109
- if (docsRowList) {
110
- draftPrompt = docsRowList + draftPrompt;
111
- }
112
- if (roleList) {
113
- draftPrompt = roleList + draftPrompt;
114
- }
115
- // console.log(draftPrompt)
116
- // console.log(draftPrompt)
117
- // return new Subscription();
118
- // 创建上下文提示词消息列表
119
- let messageList = [
120
- { role: "user", content: draftPrompt },
121
- ];
122
- // console.log("user messageList",messageList)
123
- // 测试:用于测试生成过程,避免大模型能量消耗
124
- // console.log(draftPrompt)
125
- // return this.testCreateLongArticle(draft,contentArray,sectionIndex,afterComplete,cdRef)
126
- // 创建并发起一条新的消息补全
127
- /**
128
- docsRowlist undefined 9576.js:1:46222
129
- storyList Array [ {…} ]
130
- */
131
- // console.log("docsRowlist",docsRowList)
132
- // console.log("storyList",storyList)
133
- // console.log("sectionDocList",params.documentList)
134
- // console.log("DraftPrompt",draftPrompt)
135
- // return new Subscription();
136
- let completion = new FmodeChatCompletion(messageList);
137
- completion.model = "fmode-4.0-cn-256k";
138
- // completion.model = "fmode-4.5-128k"
139
- params.draft?.set("model", completion?.model);
140
- // 持续更新事件推送的消息体内容绑定至消息变量
141
- let message;
142
- // console.log("before comp$")
143
- let comp$ = completion.sendCompletion({ isDirect: true }).pipe(finalize(() => {
144
- message.complete = true;
145
- })).subscribe(async (message) => {
146
- // console.log("newSectionCreate subscribe",message)
147
- if (!params?.contentArray?.[params?.sectionIndex]) {
148
- params.contentArray[params.sectionIndex] = { "type": "markdown", content: `` };
149
- }
150
- // 替换多余标题
151
- if (typeof message?.content == "string") {
152
- message.content = message.content?.replaceAll(`## ${section?.title}`, "");
153
- message.content = message.content?.replaceAll(`# ${section?.title}`, "");
154
- message.content = message.content?.replaceAll(`${section?.title}`, "");
155
- }
156
- params.contentArray[params?.sectionIndex].content = `# ${section?.title}\n${message.content}`;
157
- if (message?.complete) {
158
- // console.log(message.content)
159
- // console.log(contentArray[params?.sectionIndex].content)
160
- // await draft.save();
161
- params?.afterComplete && params?.afterComplete(params?.draft);
162
- try {
163
- params?.cdRef?.detectChanges();
164
- if (!comp$?.closed)
165
- comp$?.unsubscribe && comp$?.unsubscribe();
166
- }
167
- catch (err) {
168
- console.error("unsubscribe", err);
169
- }
170
- }
171
- params?.cdRef?.detectChanges();
172
- });
173
- return comp$;
174
- }
175
- testCreateLongArticle(draft, contentArray, sectionIndex, afterComplete, cdRef) {
176
- let content = ``;
177
- return from([
178
- `大连宇科创新科技有限公司作为国内领先的氢能测试装备和解决方案提供商,其在氢能领域的技术创新和未来发展方向备受瞩目。公司通过团队核心成员丰富的燃料电池及系统研发经验,采用创新加湿技术、流体控制模式和独创算法等,打造了高精度、高稳定性、功能完善的氢能测试设备,为客户提供极具竞争力、安全可信赖的产品、解决方案与服务。`,
179
- `在技术创新方面,大连宇科创新科技有限公司不断提升研发水准,致力于为燃料电池领域科技发展做出积极贡献。公司拥有国家级高新技术企业认证,通过ISO9001质量体系认证、ISO14001环境管理体系认证、ISO45001职业健康安全管理体系认证等多项资质,展现了其在技术水平和产品质量方面的领先地位。`,
180
- `在未来发展方向上,大连宇科创新科技有限公司将继续坚持以自主研发和自主品牌为发展核心,不断推动技术创新,增强企业核心竞争力。公司与中科院大连化学物理研究所、大连海事大学等高校建立合作关系,共同推进企业与高校的全面技术术合作,形成专业、产业相互促进,共同发展的局面。`,
181
- `在市场前景方面,大连宇科创新科技有限公司已经与中国科学院、清华大学、国家电投集团等知名机构建立了合作关系,市场反馈良好。公司在行业机构测评中取得了多个荣誉,技术水平已达到国内领先水平。随着氢能装备产业的快速发展,公司有望在未来取得更大的市场份额,成为行业的领头羊。`,
182
- `综上所述,大连宇科创新科技有限公司在氢能测试装备领域具有较强的技术创新性和市场竞争力,未来发展潜力巨大。建议公司继续加大研发投入,拓展合作伙伴关系,不断提升产品质量和服务水平,以应对市场竞争,实现更好的发展。 `,
183
- `综上所述,大连宇科创新科技有限公司在氢能测试装备领域取得了令人瞩目的成就,不仅在技术创新方面具有国内领先地位,还在服务质量和市场影响力上展现出强大实力。其通过不断提升研发水准和加强核心竞争力,为燃料电池领域的科技发展做出了积极贡献。`,
184
- `展望未来,大连宇科创新科技有限公司将继续坚持自主研发和品牌建设,不断拓展业务领域,加大创新力度,助推我国氢能装备产业的快速发展。公司的发展潜力和价值不可估量,对氢能技术的推动和应用具有重要意义。`,
185
- `因此,鼓励广大读者关注和支持氢能技术的发展,共同见证大连宇科创新科技有限公司在未来的辉煌成就,为构建清洁能源时代贡献自己的力量。让我们携手并肩,共同开创氢能技术的美好未来! `,
186
- ]).subscribe(message => {
187
- content += message;
188
- if (!contentArray[sectionIndex]) {
189
- contentArray[sectionIndex] = { "type": "markdown", content: `` };
190
- }
191
- contentArray[sectionIndex].content = content;
192
- if (message?.indexOf("因此,鼓励") > -1) {
193
- afterComplete && afterComplete(draft);
194
- }
195
- cdRef?.detectChanges();
196
- });
197
- }
198
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: DraftService, deps: [{ token: i1.PersonService }], target: i0.ɵɵFactoryTarget.Injectable }); }
199
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: DraftService, providedIn: 'root' }); }
200
- }
201
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: DraftService, decorators: [{
202
- type: Injectable,
203
- args: [{
204
- providedIn: 'root'
205
- }]
206
- }], ctorParameters: () => [{ type: i1.PersonService }] });
207
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJhZnQuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Ztb2RlLW5nL3NyYy9saWIvdGV4dC9mbS1hcnRpY2xlLWVkaXRvci9kcmFmdC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBcUIsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzlELE9BQU8sRUFBRSxtQkFBbUIsRUFBb0IsTUFBTSxZQUFZLENBQUM7QUFDbkUsT0FBTyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBQzFCLE9BQU8sRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFnQixNQUFNLE1BQU0sQ0FBQztBQUNwRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQzs7O0FBQ3pHLE1BQU0sV0FBVyxHQUFHLElBQUksV0FBVyxFQUFFLENBQUM7QUFFdEMsSUFBSSwyQkFBMkIsR0FBRyw0QkFBNEIsQ0FBQTtBQUs5RCxNQUFNLE9BQU8sWUFBWTtJQVF2QixZQUNVLFVBQXdCO1FBQXhCLGVBQVUsR0FBVixVQUFVLENBQWM7UUFQbEMsaUJBQVksR0FBaUMsRUFBRSxDQUFBO1FBQy9DLGtCQUFhLEdBQXNCLEVBQUUsQ0FBQTtRQUNyQyxVQUFLLEdBQVUsQ0FBQyxDQUFDO1FBQ2pCLFlBQU8sR0FBVSxDQUFDLENBQUM7UUFDbkIsZUFBVSxHQUFVLENBQUMsQ0FBQztJQUt0QixDQUFDO0lBRUQsS0FBSyxDQUFDLGdCQUFnQixDQUFDLE9BQW9CO1FBQ3pDLElBQUcsQ0FBQyxPQUFPLEVBQUUsRUFBRTtZQUFFLE9BQU87UUFDeEIsSUFBSSxLQUFLLEdBQUcsSUFBSSxLQUFLLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FB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RlgsTUFBTTs7NEZBRVAsWUFBWTtrQkFIeEIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3RvclJlZiwgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBGbW9kZUNoYXRDb21wbGV0aW9uLCBGbW9kZUNoYXRNZXNzYWdlIH0gZnJvbSAnLi4vLi4vYWlnYyc7XHJcbmltcG9ydCBQYXJzZSBmcm9tIFwicGFyc2VcIjtcclxuaW1wb3J0IHsgZmluYWxpemUsIGZyb20sIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBBZ2VudFByb21wdCB9IGZyb20gJy4uLy4uL2NvcmUnO1xyXG5pbXBvcnQgeyBQZXJzb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vcGVyc29uL3BlcnNvbi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgUHJvbXB0SW5zZXJ0aW9uRG9jdW1lbnRMaXN0LCBQcm9tcHRJbnNlcnRpb25Sb2xlTGlzdCB9IGZyb20gJy4vcHJvbXB0L3Byb21wdC1pbnNlcnRpb24tYXJ0aWNsZSc7XHJcbmNvbnN0IGFnZW50UHJvbXB0ID0gbmV3IEFnZW50UHJvbXB0KCk7XHJcblxyXG52YXIgUHJvbXB0VHBsQXJ0aWNsZVNlY3Rpb25Db2RlID0gXCJhcnRpY2xlLXNlY3Rpb24tY3JlYXRlLXRwbFwiXHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBEcmFmdFNlcnZpY2Uge1xyXG5cclxuICBEcmFmdExpc3RNYXA6e1trZXk6c3RyaW5nXTpQYXJzZS5PYmplY3RbXX0gPSB7fVxyXG4gIERyYWZ0Q291bnRNYXA6e1trZXk6c3RyaW5nXTphbnl9ID0ge31cclxuICB0b3RhbDpudW1iZXIgPSAwO1xyXG4gIGFpQ291bnQ6bnVtYmVyID0gMDtcclxuICBkcmFmdENvdW50Om51bWJlciA9IDA7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBwZXJzb25TZXJ2OlBlcnNvblNlcnZpY2VcclxuICApIHsgXHJcbiAgfVxyXG5cclxuICBhc3luYyBsb2FkQXJ0aWNsZURyYWZ0KGFydGljbGU6UGFyc2UuT2JqZWN0KXtcclxuICAgIGlmKCFhcnRpY2xlPy5pZCkgcmV0dXJuO1xyXG4gICAgbGV0IHF1ZXJ5ID0gbmV3IFBhcnNlLlF1ZXJ5KFwiQXJ0aWNsZURyYWZ0XCIpO1xyXG4gICAgcXVlcnkuZXF1YWxUbyhcImFydGljbGVcIixhcnRpY2xlPy5pZCk7XHJcbiAgICBxdWVyeS5hZGREZXNjZW5kaW5nKFwidXBkYXRlZEF0XCIpXHJcbiAgICBxdWVyeS5ub3RFcXVhbFRvKFwiaXNEZWxldGVkXCIsdHJ1ZSk7XHJcbiAgICB0aGlzLkRyYWZ0TGlzdE1hcFthcnRpY2xlPy5pZF0gPSBhd2FpdCBxdWVyeS5maW5kKCk7XHJcblxyXG4gICAgaWYoIXRoaXMuRHJhZnRDb3VudE1hcFthcnRpY2xlLmlkXSkgdGhpcy5EcmFmdENvdW50TWFwW2FydGljbGUuaWRdID0ge31cclxuICAgIHRoaXMuRHJhZnRDb3VudE1hcFthcnRpY2xlLmlkXS50b3RhbCA9IHRoaXMuRHJhZnRMaXN0TWFwW2FydGljbGU/LmlkXT8ubGVuZ3RoO1xyXG4gICAgdGhpcy5EcmFmdENvdW50TWFwW2FydGljbGUuaWRdLmFpQ291bnQgPSB0aGlzLkRyYWZ0TGlzdE1hcFthcnRpY2xlPy5pZF0uZmlsdGVyKGl0ZW09Pml0ZW0/LmdldChcInR5cGVcIik9PVwiYWlcIik/Lmxlbmd0aDtcclxuICAgIHRoaXMuRHJhZnRDb3VudE1hcFthcnRpY2xlLmlkXS5kcmFmdENvdW50ID0gdGhpcy50b3RhbCAtIHRoaXMuYWlDb3VudDtcclxuICB9XHJcblxyXG5cclxuICBhc3luYyBuZXdTZWN0aW9uQ3JlYXRlKFxyXG4gICAgcGFyYW1zOntcclxuICAgICAgd3JpdGluZ09wdGlvbnM6YW55LFxyXG4gICAgICBwZXJzb24/OlBhcnNlLk9iamVjdCxcclxuICAgICAgb3V0bGluZUpzb246YW55LFxyXG4gICAgICBjb250ZW50QXJyYXk6YW55LGRyYWZ0OlBhcnNlLk9iamVjdHx1bmRlZmluZWQsc2VjdGlvbkluZGV4Om51bWJlcixkb2N1bWVudExpc3Q/OkFycmF5PGFueT4sXHJcbiAgICAgIGFmdGVyQ29tcGxldGU/OkZ1bmN0aW9uLFxyXG4gICAgICBjZFJlZj86Q2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgICB9XHJcbiAgKTpQcm9taXNlPFN1YnNjcmlwdGlvbj57XHJcbiAgICBsZXQgb3V0bGluZUpzb24gPSBwYXJhbXM/LmRyYWZ0Py5nZXQoXCJvdXRsaW5lSnNvblwiKVxyXG4gICAgbGV0IHNlY3Rpb24gPSBvdXRsaW5lSnNvbj8uc2VjdGlvbnM/LltwYXJhbXM/LnNlY3Rpb25JbmRleF1cclxuICAgIC8vIGNvbnNvbGUubG9nKG91dGxpbmVKc29uLHNlY3Rpb24pXHJcblxyXG5cclxuXHJcbiAgICAvLyDmi7zmjqXmj5DnpLror41cclxuICAgIGxldCBvcHRpb25zOmFueSA9IHBhcmFtcy53cml0aW5nT3B0aW9uc1xyXG4gICAgb3B0aW9ucy50aXRsZSA9IHNlY3Rpb24/LnRpdGxlOyAvLyDnq6DoioLmoIfpophcclxuICAgIG9wdGlvbnMub3V0bGluZT1cIlwiO1xyXG4gICAgb3B0aW9ucy5za2lsbD1cIlwiO1xyXG4gICAgb3B0aW9ucy5jYXNlPVwiXCI7XHJcbiAgICBvcHRpb25zLmNvdW50PVwiXCI7XHJcbiAgICBvcHRpb25zLndyaXR0aW5nUGVyc29uPSBvcHRpb25zLndyaXR0aW5nUGVyc29uIHx8IFwi56ys5LiJ5Lq656ewXCI7XHJcbiAgICBcclxuICAgIC8vIOaLvOaOpeS4u+S6uuWFrFxyXG4gICAgb3B0aW9ucy5wZXJzb25OYW1lID0gcGFyYW1zPy5wZXJzb24/LmdldChcIm5hbWVcIikgfHwgXCJcIjtcclxuICAgIG9wdGlvbnMucGVyc29uR2VuZGVyID0gcGFyYW1zPy5wZXJzb24/LmdldChcImdlbmRlclwiKSB8fCBcIlwiO1xyXG5cclxuICAgIC8vIGNvbnNvbGUubG9nKHBhcmFtcz8ucGVyc29uPy50b0pTT04oKSxvcHRpb25zKVxyXG4gICAgLy8gaWYoIXBhcmFtcz8ucGVyc29uPy5pZCl7XHJcbiAgICAgIC8vIHJldHVybiBuZXcgU3Vic2NyaXB0aW9uKCk7XHJcbiAgICAvLyB9XHJcbiAgICBpZihzZWN0aW9uPy5vdXRsaW5lKSBvcHRpb25zLm91dGxpbmUgPSBgLOS4u+imgeWGheWuuToke3NlY3Rpb24/Lm91dGxpbmV9LmBcclxuICAgIGlmKHNlY3Rpb24/LnNraWxsKSBvcHRpb25zLnNraWxsID0gYCzlhpnkvZzmioDlt6c6JHtzZWN0aW9uPy5za2lsbH0uYFxyXG4gICAgaWYoc2VjdGlvbj8uY2FzZSkgb3B0aW9ucy5jYXNlID0gYCznu4boioLmoYjkvos6JHtzZWN0aW9uPy5jYXNlfS5gXHJcbiAgICBpZihzZWN0aW9uPy5jb3VudCkgb3B0aW9ucy5jb3VudCA9IGAs5oC75a2X5pWw6L6+JHtzZWN0aW9uPy5jb3VudHx8MjAwMH3ku6XkuIouYFxyXG4gICAgaWYocGFyYW1zPy5jb250ZW50QXJyYXk/Lmxlbmd0aCl7XHJcbiAgICAgIGxldCBzZWN0aW9ucyA9IG91dGxpbmVKc29uPy5zZWN0aW9ucyB8fCBbXVxyXG4gICAgICBsZXQgY29udGVudCA9IHNlY3Rpb25zLm1hcCgoaXRlbSxpbmRleCk9PnsgcmV0dXJuIGAjICR7aXRlbS50aXRsZX1cXG4ke3BhcmFtcz8uY29udGVudEFycmF5Py5baW5kZXhdPy5jb250ZW50IHx8ICflvoXlrozmiJAnfVxcbmB9KT8uam9pbihcIlxcblwiKVxyXG4gICAgICBvcHRpb25zLmNyZWF0ZWRDb250ZW50ID0gXCJcXG7lt7LnvJblhpnlhoXlrrk6XFxuXCIrY29udGVudCtcIlxcblwiXHJcbiAgICB9XHJcbiAgICBsZXQgZHJhZnRQcm9tcHQgPSBhd2FpdCBhZ2VudFByb21wdC5nZXRGb3JtYXRUcGwoUHJvbXB0VHBsQXJ0aWNsZVNlY3Rpb25Db2RlLG9wdGlvbnMpXHJcblxyXG4gICAgLy8gZHJhZnRQcm9tcHQgPSBgXFxu5oKo5piv5LiA5ZCN6LWE5rex55qE5L2c5a625ZKM572R57uc57yW6L6R77yM6K+35oKo5Y+C6ICD55+l6K+G5paH5qGjLOinkuiJsuWFs+ezuyzlhpnlh7rigJwke3NlY3Rpb24/LnRpdGxlfeKAnemDqOWIhizlhbbkuK1gXHJcbiAgICAvLyBpZihzZWN0aW9uPy5vdXRsaW5lKSBkcmFmdFByb21wdCArPSBg5Li76KaB5YaF5a65OiR7c2VjdGlvbj8ub3V0bGluZX0uYFxyXG4gICAgLy8gaWYoc2VjdGlvbj8uc2tpbGwpIGRyYWZ0UHJvbXB0ICs9IGDlhpnkvZzmioDlt6c6JHtzZWN0aW9uPy5za2lsbH0uYFxyXG4gICAgLy8gaWYoc2VjdGlvbj8uY2FzZSkgZHJhZnRQcm9tcHQgKz0gYOe7huiKguahiOS+izoke3NlY3Rpb24/LmNhc2V9LmBcclxuICAgIC8vIGRyYWZ0UHJvbXB0ICs9IGDmgLvlrZfmlbDovr4ke3NlY3Rpb24/LmNvdW50fHwyMDAwfeS7peS4ii5gXHJcbiAgICAvLyDmi7zmjqXnm7jlhbPmj5DnpLror41cclxuICAgIC8vIOS7heWKoOi9veeroOiKguebuOWFs+aWh+aho1xyXG4gICAgbGV0IHN0b3J5TGlzdDphbnlbXSA9IFtdXHJcbiAgICBpZihzZWN0aW9uPy5kb2NMaXN0Py5sZW5ndGg+MCl7XHJcbiAgICAgIGxldCBxdWVyeSA9IG5ldyBQYXJzZS5RdWVyeShcIkRvY3VtZW50XCIpO1xyXG4gICAgICBxdWVyeS5ub3RFcXVhbFRvKFwiaXNEZWxldGVkXCIsdHJ1ZSk7XHJcbiAgICAgIHF1ZXJ5LmNvbnRhaW5lZEluKFwib2JqZWN0SWRcIixzZWN0aW9uPy5kb2NMaXN0KVxyXG4gICAgICBsZXQgc2VjdGlvbkRvY0xpc3QgPSBhd2FpdCBxdWVyeT8uZmluZCgpXHJcbiAgICAgIGlmKHNlY3Rpb25Eb2NMaXN0Py5sZW5ndGg+MCl7XHJcbiAgICAgICAgcGFyYW1zLmRvY3VtZW50TGlzdCA9IHNlY3Rpb25Eb2NMaXN0XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGxldCBxdWVyeXMgPSBuZXcgUGFyc2UuUXVlcnkoXCJTdG9yeVwiKTtcclxuICAgICAgcXVlcnlzLmluY2x1ZGUoXCJjaGF0U2Vzc2lvblwiLFwicGVyc29uXCIsXCJyZWNvcmRlclwiLFwidXNlclwiKVxyXG4gICAgICBxdWVyeXMubm90RXF1YWxUbyhcImlzRGVsZXRlZFwiLHRydWUpO1xyXG4gICAgICBxdWVyeXMuY29udGFpbmVkSW4oXCJvYmplY3RJZFwiLHNlY3Rpb24/LmRvY0xpc3QpO1xyXG4gICAgICBzdG9yeUxpc3QgPSBhd2FpdCBxdWVyeXM/LmZpbmQoKTtcclxuICAgIH1cclxuICAgIC8vIOebuOWFs+inkuiJsuWIl+ihqOOAgeefpeivhuaWh+aho1xyXG4gICAgbGV0IHJvbGVMaXN0O2xldCBkb2NzUm93TGlzdDtcclxuICAgIGlmKHBhcmFtcy5kb2N1bWVudExpc3Q/Lmxlbmd0aCB8fCBzdG9yeUxpc3Q/Lmxlbmd0aCl7XHJcbiAgICAgIHRyeXtcclxuICAgICAgICByb2xlTGlzdCA9IGF3YWl0IFByb21wdEluc2VydGlvblJvbGVMaXN0KHBhcmFtcy5kb2N1bWVudExpc3Qsc3RvcnlMaXN0KVxyXG4gICAgICB9Y2F0Y2goZXJyKXtjb25zb2xlLmVycm9yKFwiUHJvbXB0SW5zZXJ0aW9uUm9sZUxpc3RcIixlcnIpfVxyXG4gICAgICB0cnl7XHJcbiAgICAgICAgZG9jc1Jvd0xpc3QgPSBhd2FpdCBQcm9tcHRJbnNlcnRpb25Eb2N1bWVudExpc3QocGFyYW1zLmRvY3VtZW50TGlzdCxzdG9yeUxpc3QsdGhpcy5wZXJzb25TZXJ2KVxyXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKFwiZG9jc1Jvd0xpc3QgaW5zZXJ0IHJldHVyblwiLGRvY3NSb3dMaXN0KVxyXG4gICAgICB9Y2F0Y2goZXJyKXtjb25zb2xlLmVycm9yKFwiUHJvbXB0SW5zZXJ0aW9uRG9jdW1lbnRMaXN0XCIsZXJyKX1cclxuICB9XHJcbiAgICAvLyDmj5LlhaXniYfmrrVcclxuICAgIGlmKGRvY3NSb3dMaXN0KXtcclxuICAgICAgZHJhZnRQcm9tcHQgPSBkb2NzUm93TGlzdCArIGRyYWZ0UHJvbXB0XHJcbiAgICB9XHJcbiAgICBpZihyb2xlTGlzdCl7XHJcbiAgICAgIGRyYWZ0UHJvbXB0ID0gcm9sZUxpc3QgKyBkcmFmdFByb21wdFxyXG4gICAgfVxyXG4gICAgLy8gY29uc29sZS5sb2coZHJhZnRQcm9tcHQpXHJcblxyXG4gICAgLy8gY29uc29sZS5sb2coZHJhZnRQcm9tcHQpXHJcbiAgICAvLyByZXR1cm4gbmV3IFN1YnNjcmlwdGlvbigpO1xyXG4gICAgIC8vIOWIm+W7uuS4iuS4i+aWh+aPkOekuuivjea2iOaBr+WIl+ihqFxyXG4gICAgIGxldCBtZXNzYWdlTGlzdCA9IFtcclxuICAgICAge3JvbGU6XCJ1c2VyXCIsY29udGVudDpkcmFmdFByb21wdH0sXHJcbiAgICBdXHJcbiAgICAvLyBjb25zb2xlLmxvZyhcInVzZXIgbWVzc2FnZUxpc3RcIixtZXNzYWdlTGlzdClcclxuICAgIC8vIOa1i+ivlTrnlKjkuo7mtYvor5XnlJ/miJDov4fnqIss6YG/5YWN5aSn5qih5Z6L6IO96YeP5raI6ICXXHJcbiAgICAvLyBjb25zb2xlLmxvZyhkcmFmdFByb21wdClcclxuICAgIC8vIHJldHVybiB0aGlzLnRlc3RDcmVhdGVMb25nQXJ0aWNsZShkcmFmdCxjb250ZW50QXJyYXksc2VjdGlvbkluZGV4LGFmdGVyQ29tcGxldGUsY2RSZWYpXHJcbiAgICAvLyDliJvlu7rlubblj5HotbfkuIDmnaHmlrDnmoTmtojmga/ooaXlhahcclxuICAgIC8qKlxyXG4gICAgICBkb2NzUm93bGlzdCB1bmRlZmluZWQgOTU3Ni5qczoxOjQ2MjIyXHJcbiAgICAgIHN0b3J5TGlzdCBBcnJheSBbIHvigKZ9IF1cclxuICAgICAqL1xyXG4gICAgLy8gY29uc29sZS5sb2coXCJkb2NzUm93bGlzdFwiLGRvY3NSb3dMaXN0KVxyXG4gICAgLy8gY29uc29sZS5sb2coXCJzdG9yeUxpc3RcIixzdG9yeUxpc3QpXHJcbiAgICAvLyBjb25zb2xlLmxvZyhcInNlY3Rpb25Eb2NMaXN0XCIscGFyYW1zLmRvY3VtZW50TGlzdClcclxuICAgIC8vIGNvbnNvbGUubG9nKFwiRHJhZnRQcm9tcHRcIixkcmFmdFByb21wdClcclxuICAgIC8vIHJldHVybiBuZXcgU3Vic2NyaXB0aW9uKCk7XHJcbiAgICBsZXQgY29tcGxldGlvbiA9IG5ldyBGbW9kZUNoYXRDb21wbGV0aW9uKG1lc3NhZ2VMaXN0KVxyXG4gICAgY29tcGxldGlvbi5tb2RlbCA9IFwiZm1vZGUtNC4wLWNuLTI1NmtcIlxyXG4gICAgLy8gY29tcGxldGlvbi5tb2RlbCA9IFwiZm1vZGUtNC41LTEyOGtcIlxyXG4gICAgcGFyYW1zLmRyYWZ0Py5zZXQoXCJtb2RlbFwiLGNvbXBsZXRpb24/Lm1vZGVsKVxyXG5cclxuICAgIC8vIOaMgee7reabtOaWsOS6i+S7tuaOqOmAgeeahOa2iOaBr+S9k+WGheWuuee7keWumuiHs+a2iOaBr+WPmOmHj1xyXG4gICAgbGV0IG1lc3NhZ2U6Rm1vZGVDaGF0TWVzc2FnZXxhbnlcclxuXHJcbiAgICAvLyBjb25zb2xlLmxvZyhcImJlZm9yZSBjb21wJFwiKVxyXG4gICAgbGV0IGNvbXAkID0gY29tcGxldGlvbi5zZW5kQ29tcGxldGlvbih7aXNEaXJlY3Q6dHJ1ZX0pLnBpcGUoZmluYWxpemUoKCk9PntcclxuICAgICAgICBtZXNzYWdlLmNvbXBsZXRlID0gdHJ1ZVxyXG4gICAgfSkpLnN1YnNjcmliZShhc3luYyBtZXNzYWdlPT57XHJcbiAgICAgIC8vIGNvbnNvbGUubG9nKFwibmV3U2VjdGlvbkNyZWF0ZSBzdWJzY3JpYmVcIixtZXNzYWdlKVxyXG4gICAgICBpZighcGFyYW1zPy5jb250ZW50QXJyYXk/LltwYXJhbXM/LnNlY3Rpb25JbmRleF0pIHtwYXJhbXMuY29udGVudEFycmF5W3BhcmFtcy5zZWN0aW9uSW5kZXhdPXtcInR5cGVcIjpcIm1hcmtkb3duXCIsY29udGVudDpgYH19XHJcbiAgICAgIC8vIOabv+aNouWkmuS9meagh+mimFxyXG4gICAgICBpZih0eXBlb2YgbWVzc2FnZT8uY29udGVudD09XCJzdHJpbmdcIil7XHJcbiAgICAgICAgbWVzc2FnZS5jb250ZW50ID0gbWVzc2FnZS5jb250ZW50Py5yZXBsYWNlQWxsKGAjIyAke3NlY3Rpb24/LnRpdGxlfWAsXCJcIilcclxuICAgICAgICBtZXNzYWdlLmNvbnRlbnQgPSBtZXNzYWdlLmNvbnRlbnQ/LnJlcGxhY2VBbGwoYCMgJHtzZWN0aW9uPy50aXRsZX1gLFwiXCIpXHJcbiAgICAgICAgbWVzc2FnZS5jb250ZW50ID0gbWVzc2FnZS5jb250ZW50Py5yZXBsYWNlQWxsKGAke3NlY3Rpb24/LnRpdGxlfWAsXCJcIilcclxuICAgICAgfVxyXG4gICAgICBwYXJhbXMuY29udGVudEFycmF5W3BhcmFtcz8uc2VjdGlvbkluZGV4XS5jb250ZW50ID0gYCMgJHtzZWN0aW9uPy50aXRsZX1cXG4ke21lc3NhZ2UuY29udGVudH1gXHJcbiAgICAgIGlmKG1lc3NhZ2U/LmNvbXBsZXRlKXtcclxuICAgICAgICAvLyBjb25zb2xlLmxvZyhtZXNzYWdlLmNvbnRlbnQpXHJcbiAgICAgICAgLy8gY29uc29sZS5sb2coY29udGVudEFycmF5W3BhcmFtcz8uc2VjdGlvbkluZGV4XS5jb250ZW50KVxyXG4gICAgICAgIC8vIGF3YWl0IGRyYWZ0LnNhdmUoKTtcclxuICAgICAgICBwYXJhbXM/LmFmdGVyQ29tcGxldGUmJnBhcmFtcz8uYWZ0ZXJDb21wbGV0ZShwYXJhbXM/LmRyYWZ0KVxyXG4gICAgICAgIHRyeXtcclxuICAgICAgICAgIHBhcmFtcz8uY2RSZWY/LmRldGVjdENoYW5nZXMoKVxyXG4gICAgICAgICAgaWYoIWNvbXAkPy5jbG9zZWQpY29tcCQ/LnVuc3Vic2NyaWJlJiZjb21wJD8udW5zdWJzY3JpYmUoKTtcclxuICAgICAgICB9Y2F0Y2goZXJyKXtcclxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJ1bnN1YnNjcmliZVwiLGVycilcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgcGFyYW1zPy5jZFJlZj8uZGV0ZWN0Q2hhbmdlcygpXHJcbiAgICB9KVxyXG4gICAgcmV0dXJuIGNvbXAkXHJcbiAgfVxyXG5cclxuICB0ZXN0Q3JlYXRlTG9uZ0FydGljbGUoZHJhZnQ6YW55LGNvbnRlbnRBcnJheTphbnksc2VjdGlvbkluZGV4Om51bWJlcixhZnRlckNvbXBsZXRlPzpGdW5jdGlvbixjZFJlZj86YW55KXtcclxuICAgIGxldCBjb250ZW50ID0gYGBcclxuICAgIHJldHVybiBmcm9tKFtcclxuICAgICAgYOWkp+i/nuWuh+enkeWIm+aWsOenkeaKgOaciemZkOWFrOWPuOS9nOS4uuWbveWGhemihuWFiOeahOawouiDvea1i+ivleijheWkh+WSjOino+WGs+aWueahiOaPkOS+m+WVhu+8jOWFtuWcqOawouiDvemihuWfn+eahOaKgOacr+WIm+aWsOWSjOacquadpeWPkeWxleaWueWQkeWkh+WPl+eeqeebruOAguWFrOWPuOmAmui/h+WboumYn+aguOW/g+aIkOWRmOS4sOWvjOeahOeHg+aWmeeUteaxoOWPiuezu+e7n+eglOWPkee7j+mqjO+8jOmHh+eUqOWIm+aWsOWKoOa5v+aKgOacr+OAgea1geS9k+aOp+WItuaooeW8j+WSjOeLrOWIm+eul+azleetie+8jOaJk+mAoOS6humrmOeyvuW6puOAgemrmOeos+WumuaAp+OAgeWKn+iDveWujOWWhOeahOawouiDvea1i+ivleiuvuWkh++8jOS4uuWuouaIt+aPkOS+m+aegeWFt+ernuS6ieWKm+OAgeWuieWFqOWPr+S/oei1lueahOS6p+WTgeOAgeino+WGs+aWueahiOS4juacjeWKoeOAgmAsXHJcbiAgICAgIGDlnKjmioDmnK/liJvmlrDmlrnpnaLvvIzlpKfov57lrofnp5HliJvmlrDnp5HmioDmnInpmZDlhazlj7jkuI3mlq3mj5DljYfnoJTlj5HmsLTlh4bvvIzoh7Tlipvkuo7kuLrnh4PmlpnnlLXmsaDpoobln5/np5HmioDlj5HlsZXlgZrlh7rnp6/mnoHotKHnjK7jgILlhazlj7jmi6XmnInlm73lrrbnuqfpq5jmlrDmioDmnK/kvIHkuJrorqTor4HvvIzpgJrov4dJU085MDAx6LSo6YeP5L2T57O76K6k6K+B44CBSVNPMTQwMDHnjq/looPnrqHnkIbkvZPns7vorqTor4HjgIFJU080NTAwMeiBjOS4muWBpeW6t+WuieWFqOeuoeeQhuS9k+ezu+iupOivgeetieWkmumhuei1hOi0qO+8jOWxleeOsOS6huWFtuWcqOaKgOacr+awtOW5s+WSjOS6p+WTgei0qOmHj+aWuemdoueahOmihuWFiOWcsOS9jeOAgmAsXHJcbiAgICAgIGDlnKjmnKrmnaXlj5HlsZXmlrnlkJHkuIrvvIzlpKfov57lrofnp5HliJvmlrDnp5HmioDmnInpmZDlhazlj7jlsIbnu6fnu63lnZrmjIHku6Xoh6rkuLvnoJTlj5Hlkozoh6rkuLvlk4HniYzkuLrlj5HlsZXmoLjlv4PvvIzkuI3mlq3mjqjliqjmioDmnK/liJvmlrDvvIzlop7lvLrkvIHkuJrmoLjlv4Pnq57kuonlipvjgILlhazlj7jkuI7kuK3np5HpmaLlpKfov57ljJblrabniannkIbnoJTnqbbmiYDjgIHlpKfov57mtbfkuovlpKflrabnrYnpq5jmoKHlu7rnq4vlkIjkvZzlhbPns7vvvIzlhbHlkIzmjqjov5vkvIHkuJrkuI7pq5jmoKHnmoTlhajpnaLmioDmnK/mnK/lkIjkvZzvvIzlvaLmiJDkuJPkuJrjgIHkuqfkuJrnm7jkupLkv4Pov5vvvIzlhbHlkIzlj5HlsZXnmoTlsYDpnaLjgIJgLFxyXG4gICAgICBg5Zyo5biC5Zy65YmN5pmv5pa56Z2i77yM5aSn6L+e5a6H56eR5Yib5paw56eR5oqA5pyJ6ZmQ5YWs5Y+45bey57uP5LiO5Lit5Zu956eR5a2m6Zmi44CB5riF5Y2O5aSn5a2m44CB5Zu95a6255S15oqV6ZuG5Zui562J55+l5ZCN5py65p6E5bu656uL5LqG5ZCI5L2c5YWz57O777yM5biC5Zy65Y+N6aaI6Imv5aW944CC5YWs5Y+45Zyo6KGM5Lia5py65p6E5rWL6K+E5Lit5Y+W5b6X5LqG5aSa5Liq6I2j6KqJ77yM5oqA5pyv5rC05bmz5bey6L6+5Yiw5Zu95YaF6aKG5YWI5rC05bmz44CC6ZqP552A5rCi6IO96KOF5aSH5Lqn5Lia55qE5b+r6YCf5Y+R5bGV77yM5YWs5Y+45pyJ5pyb5Zyo5pyq5p2l5Y+W5b6X5pu05aSn55qE5biC5Zy65Lu96aKd77yM5oiQ5Li66KGM5Lia55qE6aKG5aS0576K44CCYCxcclxuICAgICAgYOe7vOS4iuaJgOi/sO+8jOWkp+i/nuWuh+enkeWIm+aWsOenkeaKgOaciemZkOWFrOWPuOWcqOawouiDvea1i+ivleijheWkh+mihuWfn+WFt+aciei+g+W8uueahOaKgOacr+WIm+aWsOaAp+WSjOW4guWcuuernuS6ieWKm++8jOacquadpeWPkeWxlea9nOWKm+W3qOWkp+OAguW7uuiuruWFrOWPuOe7p+e7reWKoOWkp+eglOWPkeaKleWFpe+8jOaLk+WxleWQiOS9nOS8meS8tOWFs+ezu++8jOS4jeaWreaPkOWNh+S6p+WTgei0qOmHj+WSjOacjeWKoeawtOW5s++8jOS7peW6lOWvueW4guWcuuernuS6ie+8jOWunueOsOabtOWlveeahOWPkeWxleOAgiBgLFxyXG4gICAgICBg57u85LiK5omA6L+w77yM5aSn6L+e5a6H56eR5Yib5paw56eR5oqA5pyJ6ZmQ5YWs5Y+45Zyo5rCi6IO95rWL6K+V6KOF5aSH6aKG5Z+f5Y+W5b6X5LqG5Luk5Lq6556p55uu55qE5oiQ5bCx77yM5LiN5LuF5Zyo5oqA5pyv5Yib5paw5pa56Z2i5YW35pyJ5Zu95YaF6aKG5YWI5Zyw5L2N77yM6L+Y5Zyo5pyN5Yqh6LSo6YeP5ZKM5biC5Zy65b2x5ZON5Yqb5LiK5bGV546w5Ye65by65aSn5a6e5Yqb44CC5YW26YCa6L+H5LiN5pat5o+Q5Y2H56CU5Y+R5rC05YeG5ZKM5Yqg5by65qC45b+D56ue5LqJ5Yqb77yM5Li654eD5paZ55S15rGg6aKG5Z+f55qE56eR5oqA5Y+R5bGV5YGa5Ye65LqG56ev5p6B6LSh54yu44CCYCxcclxuICAgICAgYOWxleacm+acquadpe+8jOWkp+i/nuWuh+enkeWIm+aWsOenkeaKgOaciemZkOWFrOWPuOWwhue7p+e7reWdmuaMgeiHquS4u+eglOWPkeWSjOWTgeeJjOW7uuiuvu+8jOS4jeaWreaLk+WxleS4muWKoemihuWfn++8jOWKoOWkp+WIm+aWsOWKm+W6pu+8jOWKqeaOqOaIkeWbveawouiDveijheWkh+S6p+S4mueahOW/q+mAn+WPkeWxleOAguWFrOWPuOeahOWPkeWxlea9nOWKm+WSjOS7t+WAvOS4jeWPr+S8sOmHj++8jOWvueawouiDveaKgOacr+eahOaOqOWKqOWSjOW6lOeUqOWFt+aciemHjeimgeaEj+S5ieOAgmAsXHJcbiAgICAgIGDlm6DmraTvvIzpvJPlirHlub/lpKfor7vogIXlhbPms6jlkozmlK/mjIHmsKLog73mioDmnK/nmoTlj5HlsZXvvIzlhbHlkIzop4Hor4HlpKfov57lrofnp5HliJvmlrDnp5HmioDmnInpmZDlhazlj7jlnKjmnKrmnaXnmoTovonnhYzmiJDlsLHvvIzkuLrmnoTlu7rmuIXmtIHog73mupDml7bku6PotKHnjK7oh6rlt7HnmoTlipvph4/jgILorqnmiJHku6zmkLrmiYvlubbogqnvvIzlhbHlkIzlvIDliJvmsKLog73mioDmnK/nmoTnvo7lpb3mnKrmnaXvvIEgYCxcclxuICAgIF0pLnN1YnNjcmliZShtZXNzYWdlPT57XHJcbiAgICAgIGNvbnRlbnQgKz0gbWVzc2FnZTtcclxuICAgICAgaWYoIWNvbnRlbnRBcnJheVtzZWN0aW9uSW5kZXhdKSB7Y29udGVudEFycmF5W3NlY3Rpb25JbmRleF09e1widHlwZVwiOlwibWFya2Rvd25cIixjb250ZW50OmBgfX1cclxuICAgICAgY29udGVudEFycmF5W3NlY3Rpb25JbmRleF0uY29udGVudCA9IGNvbnRlbnRcclxuICAgICAgaWYobWVzc2FnZT8uaW5kZXhPZihcIuWboOatpO+8jOm8k+WKsVwiKT4tMSl7XHJcbiAgICAgICAgYWZ0ZXJDb21wbGV0ZSYmYWZ0ZXJDb21wbGV0ZShkcmFmdClcclxuICAgICAgfVxyXG4gICAgICBjZFJlZj8uZGV0ZWN0Q2hhbmdlcygpXHJcbiAgICB9KVxyXG4gIH1cclxuICAvKipcclxuICAgKiBBSeWIm+S9nO+8muagueaNruWkp+e6suWSjOWPguaVsOWIm+S9nOiNieeov++8iOWFqOaWh+Wkp+e6siBzdHJpbmfniYjmnKzvvIlcclxuICAgKiBAcGFyYW0gZHJhZnQgQXJ0aWNsZURyYWZ0IOWvueixoVxyXG4gICAqIEBwYXJhbSBjb250ZW50IOmihOiniOWGheWuueWPmOmHj1xyXG4gICAqIEBwYXJhbSBvcHRpb25zIFxyXG4gICAqIEBwYXJhbSBvcHRpb25zLm91dGxpbmUg5paH56ug5o+Q57qyXHJcbiAgICogQHBhcmFtIG9wdGlvbnMud3JpdGluZ09wdGlvbnMg5YaZ5L2c5Y+C5pWwXHJcbiAgICogQHJldHVybnMgXHJcbiAgICovXHJcbiAgLy8gYXN5bmMgbmV3RHJhZnRDcmVhdGUoZHJhZnQ6UGFyc2UuT2JqZWN0LG91dGxpbmU6YW55LHdyaXRpbmdPcHRpb25zOmFueSxkb2NMaXN0PzpBcnJheTxhbnk+LGRvY3VtZW50TGlzdD86QXJyYXk8YW55PixhZnRlckNvbXBsZXRlPzpGdW5jdGlvblxyXG4gIC8vICk6UHJvbWlzZTxTdWJzY3JpcHRpb24+e1xyXG4gIC8vICAgbGV0IGRyYWZ0UHJvbXB0ID0gYOaCqOaYr+S4gOWQjei1hOa3seeahOS9nOWutuWSjOe9kee7nOe8lui+ke+8jOivt+aCqOWFheWIhuWPguiAg+efpeivhuaWh+ahoyzlhpnkvZzmj5DnurIs5YaZ5Ye65pW056+H5a6M5pW055qE5paH56ugLOehruS/neW8leiogOOAgeS4u+S9k+auteiQveOAgee7k+iuuuWGheWuueS4sOWvjOWtl+aVsOWFhei2s++8jOaAu+Wtl+aVsOi+vuWIsCR7d3JpdGluZ09wdGlvbnM/LndvcmRDb3VudHx8MjAwMH3kuKrku6XkuIrjgILlhpnkvZzmj5DnurLlpoLkuIvvvJpcXG5cXGBcXGBcXGAgbWRcXG4ke291dGxpbmV9XFxuXFxgXFxgXFxgYFxyXG4gIC8vICAgLy8g5ou85o6l55u45YWz5o+Q56S66K+NXHJcbiAgLy8gICAvLyDnm7jlhbPop5LoibLliJfooajjgIHnn6Xor4bmlofmoaNcclxuICAvLyAgIGxldCByb2xlTGlzdDtsZXQgZG9jc1Jvd0xpc3Q7XHJcbiAgLy8gICBpZihkb2N1bWVudExpc3Q/Lmxlbmd0aCl7XHJcbiAgLy8gICAgIHJvbGVMaXN0ID0gYXdhaXQgUHJvbXB0SW5zZXJ0aW9uUm9sZUxpc3QoZG9jdW1lbnRMaXN0KVxyXG4gIC8vICAgICBkb2NzUm93TGlzdCA9IGF3YWl0IFByb21wdEluc2VydGlvbkRvY3VtZW50TGlzdChkb2N1bWVudExpc3QpXHJcbiAgLy8gICB9XHJcbiAgLy8gICAvLyDmj5LlhaXniYfmrrVcclxuICAvLyAgIGlmKGRvY3NSb3dMaXN0KXtcclxuICAvLyAgICAgZHJhZnRQcm9tcHQgKz0gZG9jc1Jvd0xpc3RcclxuICAvLyAgIH1cclxuICAvLyAgIGlmKHJvbGVMaXN0KXtcclxuICAvLyAgICAgZHJhZnRQcm9tcHQgKz0gcm9sZUxpc3RcclxuICAvLyAgIH1cclxuXHJcbiAgLy8gICAvLyBjb25zb2xlLmxvZyhkcmFmdFByb21wdClcclxuICAvLyAgIC8vIHJldHVybiBuZXcgU3Vic2NyaXB0aW9uKCk7XHJcbiAgLy8gICAgLy8g5Yib5bu65LiK5LiL5paH5o+Q56S66K+N5raI5oGv5YiX6KGoXHJcbiAgLy8gICAgbGV0IG1lc3NhZ2VMaXN0ID0gW1xyXG4gIC8vICAgICB7cm9sZTpcInVzZXJcIixjb250ZW50OmRyYWZ0UHJvbXB0fSxcclxuICAvLyAgIF1cclxuICAvLyAgIC8vIOWIm+W7uuW5tuWPkei1t+S4gOadoeaWsOeahOa2iOaBr+ihpeWFqFxyXG4gIC8vICAgbGV0IGNvbXBsZXRpb24gPSBuZXcgRm1vZGVDaGF0Q29tcGxldGlvbihtZXNzYWdlTGlzdClcclxuICAvLyAgIGNvbXBsZXRpb24ubW9kZWwgPSBcImZtb2RlLTQuNS0xMjhrXCJcclxuICAvLyAgIC8vIGNvbXBsZXRpb24ubW9kZWwgPSBcImZtb2RlLTQuNS0xMjhrXCJcclxuICAvLyAgIGRyYWZ0LnNldChcIm1vZGVsXCIsY29tcGxldGlvbj8ubW9kZWwpXHJcblxyXG4gIC8vICAgLy8g5oyB57ut5pu05paw5LqL5Lu25o6o6YCB55qE5raI5oGv5L2T5YaF5a6557uR5a6a6Iez5raI5oGv5Y+Y6YePXHJcbiAgLy8gICBsZXQgbWVzc2FnZTpGbW9kZUNoYXRNZXNzYWdlfGFueVxyXG5cclxuICAvLyAgIGxldCBjb21wJCA9IGNvbXBsZXRpb24uc2VuZENvbXBsZXRpb24oe2lzRGlyZWN0OnRydWV9KS5waXBlKGZpbmFsaXplKCgpPT57XHJcbiAgLy8gICAgICAgbWVzc2FnZS5jb21wbGV0ZSA9IHRydWVcclxuICAvLyAgIH0pKS5zdWJzY3JpYmUoYXN5bmMgbWVzc2FnZT0+e1xyXG4gIC8vICAgICBkcmFmdC5zZXQoXCJjb250ZW50XCIsbWVzc2FnZS5jb250ZW50KTtcclxuICAvLyAgICAgaWYobWVzc2FnZT8uY29tcGxldGUpe1xyXG4gIC8vICAgICAgIGF3YWl0IGRyYWZ0LnNhdmUoKTtcclxuICAvLyAgICAgICBhZnRlckNvbXBsZXRlJiZhZnRlckNvbXBsZXRlKGRyYWZ0KVxyXG4gIC8vICAgICAgIGNvbXAkPy51bnN1YnNjcmliZSgpO1xyXG4gIC8vICAgICB9XHJcbiAgLy8gICB9KVxyXG4gIC8vICAgcmV0dXJuIGNvbXAkXHJcblxyXG4gIC8vIH1cclxuXHJcbn1cclxuICJdfQ==
1
+
2
+ /**
3
+ * @copyright © 未来飞马 © 未来全栈 www.fmode.cn
4
+ * 版权所有 © 未来飞马 © 江西脑控科技有限公司 Copyright © Fmode Technology Co., Ltd.
5
+ * 保留所有权利 All Rights Reserved.
6
+ * /home/ryan/workspace/nova/nova-admin/dist/fmode-ng/esm2022/lib/text/fm-article-editor/draft.service.mjs
7
+ */
8
+ import{Injectable}from"@angular/core";import{FmodeChatCompletion}from"../../aigc";import{FmodeParse}from"@fmode/parse";import{finalize,from}from"rxjs";import{AgentPrompt}from"../../core";import{PersonService}from"../../person/person.service";import{PromptInsertionDocumentList,PromptInsertionRoleList}from"./prompt/prompt-insertion-article";import*as i0 from"@angular/core";import*as i1 from"../../person/person.service";const Parse=FmodeParse.with("nova"),agentPrompt=new AgentPrompt;var PromptTplArticleSectionCode="article-section-create-tpl";export class DraftService{constructor(t){this.personServ=t,this.DraftListMap={},this.DraftCountMap={},this.total=0,this.aiCount=0,this.draftCount=0}async loadArticleDraft(t){if(!t?.id)return;let e=new Parse.Query("ArticleDraft");e.equalTo("article",t?.id),e.addDescending("updatedAt"),e.notEqualTo("isDeleted",!0),this.DraftListMap[t?.id]=await e.find(),this.DraftCountMap[t.id]||(this.DraftCountMap[t.id]={}),this.DraftCountMap[t.id].total=this.DraftListMap[t?.id]?.length,this.DraftCountMap[t.id].aiCount=this.DraftListMap[t?.id].filter((t=>"ai"==t?.get("type")))?.length,this.DraftCountMap[t.id].draftCount=this.total-this.aiCount}async newSectionCreate(t){let e=t?.draft?.get("outlineJson"),n=e?.sections?.[t?.sectionIndex],o=t.writingOptions;if(o.title=n?.title,o.outline="",o.skill="",o.case="",o.count="",o.writtingPerson=o.writtingPerson||"第三人称",o.personName=t?.person?.get("name")||"",o.personGender=t?.person?.get("gender")||"",n?.outline&&(o.outline=`,主要内容:${n?.outline}.`),n?.skill&&(o.skill=`,写作技巧:${n?.skill}.`),n?.case&&(o.case=`,细节案例:${n?.case}.`),n?.count&&(o.count=`,总字数达${n?.count||2e3}以上.`),t?.contentArray?.length){let n=e?.sections||[],r=n.map(((e,n)=>`# ${e.title}\n${t?.contentArray?.[n]?.content||"待完成"}\n`))?.join("\n");o.createdContent="\n已编写内容:\n"+r+"\n"}let r,i,a=await agentPrompt.getFormatTpl(PromptTplArticleSectionCode,o),s=[];if(n?.docList?.length>0){let e=new Parse.Query("Document");e.notEqualTo("isDeleted",!0),e.containedIn("objectId",n?.docList);let o=await(e?.find());o?.length>0&&(t.documentList=o);let r=new Parse.Query("Story");r.include("chatSession","person","recorder","user"),r.notEqualTo("isDeleted",!0),r.containedIn("objectId",n?.docList),s=await(r?.find())}if(t.documentList?.length||s?.length){try{r=await PromptInsertionRoleList(t.documentList,s)}catch(t){console.error("PromptInsertionRoleList",t)}try{i=await PromptInsertionDocumentList(t.documentList,s,this.personServ)}catch(t){console.error("PromptInsertionDocumentList",t)}}i&&(a=i+a),r&&(a=r+a);let c=new FmodeChatCompletion([{role:"user",content:a}]);c.model="fmode-4.0-cn-256k",t.draft?.set("model",c?.model);let l=c.sendCompletion({isDirect:!0}).pipe(finalize((()=>{undefined.complete=!0}))).subscribe((async e=>{if(t?.contentArray?.[t?.sectionIndex]||(t.contentArray[t.sectionIndex]={type:"markdown",content:""}),"string"==typeof e?.content&&(e.content=e.content?.replaceAll(`## ${n?.title}`,""),e.content=e.content?.replaceAll(`# ${n?.title}`,""),e.content=e.content?.replaceAll(`${n?.title}`,"")),t.contentArray[t?.sectionIndex].content=`# ${n?.title}\n${e.content}`,e?.complete){t?.afterComplete&&t?.afterComplete(t?.draft);try{t?.cdRef?.detectChanges(),l?.closed||l?.unsubscribe&&l?.unsubscribe()}catch(t){console.error("unsubscribe",t)}}t?.cdRef?.detectChanges()}));return l}testCreateLongArticle(t,e,n,o,r){let i="";return from(["大连宇科创新科技有限公司作为国内领先的氢能测试装备和解决方案提供商,其在氢能领域的技术创新和未来发展方向备受瞩目。公司通过团队核心成员丰富的燃料电池及系统研发经验,采用创新加湿技术、流体控制模式和独创算法等,打造了高精度、高稳定性、功能完善的氢能测试设备,为客户提供极具竞争力、安全可信赖的产品、解决方案与服务。","在技术创新方面,大连宇科创新科技有限公司不断提升研发水准,致力于为燃料电池领域科技发展做出积极贡献。公司拥有国家级高新技术企业认证,通过ISO9001质量体系认证、ISO14001环境管理体系认证、ISO45001职业健康安全管理体系认证等多项资质,展现了其在技术水平和产品质量方面的领先地位。","在未来发展方向上,大连宇科创新科技有限公司将继续坚持以自主研发和自主品牌为发展核心,不断推动技术创新,增强企业核心竞争力。公司与中科院大连化学物理研究所、大连海事大学等高校建立合作关系,共同推进企业与高校的全面技术术合作,形成专业、产业相互促进,共同发展的局面。","在市场前景方面,大连宇科创新科技有限公司已经与中国科学院、清华大学、国家电投集团等知名机构建立了合作关系,市场反馈良好。公司在行业机构测评中取得了多个荣誉,技术水平已达到国内领先水平。随着氢能装备产业的快速发展,公司有望在未来取得更大的市场份额,成为行业的领头羊。","综上所述,大连宇科创新科技有限公司在氢能测试装备领域具有较强的技术创新性和市场竞争力,未来发展潜力巨大。建议公司继续加大研发投入,拓展合作伙伴关系,不断提升产品质量和服务水平,以应对市场竞争,实现更好的发展。 ","综上所述,大连宇科创新科技有限公司在氢能测试装备领域取得了令人瞩目的成就,不仅在技术创新方面具有国内领先地位,还在服务质量和市场影响力上展现出强大实力。其通过不断提升研发水准和加强核心竞争力,为燃料电池领域的科技发展做出了积极贡献。","展望未来,大连宇科创新科技有限公司将继续坚持自主研发和品牌建设,不断拓展业务领域,加大创新力度,助推我国氢能装备产业的快速发展。公司的发展潜力和价值不可估量,对氢能技术的推动和应用具有重要意义。","因此,鼓励广大读者关注和支持氢能技术的发展,共同见证大连宇科创新科技有限公司在未来的辉煌成就,为构建清洁能源时代贡献自己的力量。让我们携手并肩,共同开创氢能技术的美好未来! "]).subscribe((a=>{i+=a,e[n]||(e[n]={type:"markdown",content:""}),e[n].content=i,a?.indexOf("因此,鼓励")>-1&&o&&o(t),r?.detectChanges()}))}static{this.ɵfac=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"17.3.12",ngImport:i0,type:DraftService,deps:[{token:i1.PersonService}],target:i0.ɵɵFactoryTarget.Injectable})}static{this.ɵprov=i0.ɵɵngDeclareInjectable({minVersion:"12.0.0",version:"17.3.12",ngImport:i0,type:DraftService,providedIn:"root"})}}i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"17.3.12",ngImport:i0,type:DraftService,decorators:[{type:Injectable,args:[{providedIn:"root"}]}],ctorParameters:()=>[{type:i1.PersonService}]});
9
+ var MODULE_PATH_NEED = `6K+l5paH5Lu25piv5pys6aG555uu55qE5LiA6YOo5YiGIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBDb21wb25lbnRzIGluIEZtb2RlIEluYy4KICAgIOeJiOadg+aJgOaciSDCqSDmnKrmnaXpo57pqawgwqkg5rGf6KW/6ISR5o6n56eR5oqA5pyJ6ZmQ5YWs5Y+4IENvcHlyaWdodCDCqSBGbW9kZSBUZWNobm9sb2d5IENvLiwgTHRkLgogICAg5L+d55WZ5omA5pyJ5p2D5YipIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICDkuKXnpoHlnKjmnKrnu4/mjojmnYPnmoTmg4XlhrXkuIvvvIzpgJrov4fku7vkvZXlqpLku4vlpI3liLbmraTmlofku7YgVW5hdXRob3JpemVkIGNvcHlpbmcgb2YgdGhpcyBmaWxlLCB2aWEgYW55IG1lZGl1bSBpcyBzdHJpY3RseSBwcm9oaWJpdGVkCiAgICDor6Xmlofku7bmmK/kuJPmnInnmoTmnLrlr4bmlofku7YgUHJvcHJpZXRhcnkgYW5kIGNvbmZpZGVudGlhbAogICAKICAgIENvcHlyaWdodCAyMDIxLW5vdyBGbW9kZSBJbmMuIHN1cHBvcnRAZm1vZGUuY24uIDE4NjA3MDA3MDczLgogICAg5L+d55WZ5omA5pyJ5p2D5YipIEFsbCByaWdodHMgcmVzZXJ2ZWQuCgogICAgUEFUSDovaG9tZS9yeWFuL3dvcmtzcGFjZS9ub3ZhL25vdmEtYWRtaW4vZGlzdC9mbW9kZS1uZy9lc20yMDIyL2xpYi90ZXh0L2ZtLWFydGljbGUtZWRpdG9yL2RyYWZ0LnNlcnZpY2UubWpz`
10
+