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.
- package/LICENSE.md +8 -0
- package/README.md +37 -37
- package/esm2022/fmode-ng.mjs +10 -5
- package/esm2022/lib/aigc/agent/fm-agent-task/fm-agent-task.component.mjs +8 -92
- package/esm2022/lib/aigc/agent/index.mjs +10 -3
- package/esm2022/lib/aigc/avatar/avatar.module.mjs +10 -45
- package/esm2022/lib/aigc/avatar/comp-avatar-particle/avatar.role.mjs +10 -2
- package/esm2022/lib/aigc/avatar/comp-avatar-particle/comp-avatar-particle.component.mjs +10 -315
- package/esm2022/lib/aigc/avatar/comp-avatar-particle/index.mjs +10 -3
- package/esm2022/lib/aigc/avatar/comp-avatar-particle/role-points.class.mjs +10 -57
- package/esm2022/lib/aigc/avatar/comp-avatar-role-image/comp-avatar-role-image.component.mjs +10 -98
- package/esm2022/lib/aigc/avatar/comp-avatar-role-video/comp-avatar-role-video.component.mjs +10 -107
- package/esm2022/lib/aigc/avatar/comp-avatar-talk/comp-avatar-talk.component.mjs +10 -113
- package/esm2022/lib/aigc/avatar/index.mjs +10 -8
- package/esm2022/lib/aigc/avatar/interface-avatar-role.mjs +10 -2
- package/esm2022/lib/aigc/avatar/modal-chat-voice-input/modal-chat-voice-input.component.mjs +8 -164
- package/esm2022/lib/aigc/chat/chat-header-area/comp-header-area.component.mjs +10 -49
- package/esm2022/lib/aigc/chat/chat-header-area/index.mjs +10 -2
- package/esm2022/lib/aigc/chat/chat-list/chat-list.component.mjs +8 -155
- package/esm2022/lib/aigc/chat/chat-list/index.mjs +10 -2
- package/esm2022/lib/aigc/chat/chat-message-area/comp-message-area.component.mjs +10 -40
- package/esm2022/lib/aigc/chat/chat-message-area/index.mjs +10 -2
- package/esm2022/lib/aigc/chat/chat-message-card/comp-message-card.component.mjs +10 -140
- package/esm2022/lib/aigc/chat/chat-message-card/duration-str.pipe.mjs +10 -29
- package/esm2022/lib/aigc/chat/chat-message-card/index.mjs +10 -3
- package/esm2022/lib/aigc/chat/chat-modal-input/index.mjs +10 -3
- package/esm2022/lib/aigc/chat/chat-modal-input/modal-audio-message/modal-audio-message.component.mjs +8 -193
- package/esm2022/lib/aigc/chat/chat-modal-input/modal-input.component.mjs +10 -331
- package/esm2022/lib/aigc/chat/chat-panel/chat-panel.component.mjs +8 -249
- package/esm2022/lib/aigc/chat/comp-role-prompt/comp-role-prompt.component.mjs +10 -83
- package/esm2022/lib/aigc/chat/comp-role-prompt/index.mjs +10 -2
- package/esm2022/lib/aigc/chat/index.mjs +10 -8
- package/esm2022/lib/aigc/comp-markdown-preview/clipboard.service.mjs +10 -82
- package/esm2022/lib/aigc/comp-markdown-preview/markdown-parse.mjs +8 -367
- package/esm2022/lib/aigc/comp-markdown-preview/markdown-preview.component.mjs +10 -51
- package/esm2022/lib/aigc/comp-markdown-preview/markdown-preview.module.mjs +10 -24
- package/esm2022/lib/aigc/comp-markdown-preview/plugins/md-mathjax/index.mjs +10 -115
- package/esm2022/lib/aigc/index.mjs +10 -14
- package/esm2022/lib/aigc/service-fmai/fmai.service.mjs +10 -21
- package/esm2022/lib/aigc/service-fmai/service-chat/chat-class.mjs +10 -2
- package/esm2022/lib/aigc/service-fmai/service-chat/chat.service.mjs +8 -174
- package/esm2022/lib/aigc/service-fmai/service-chat/index.mjs +10 -7
- package/esm2022/lib/aigc/service-fmai/service-chat/mask-list.mjs +9 -194
- package/esm2022/lib/aigc/service-fmai/service-chat/pipes/chat-content.pipe.mjs +10 -27
- package/esm2022/lib/aigc/service-fmai/service-chat/pipes/hidexml.pipe.mjs +10 -27
- package/esm2022/lib/aigc/service-fmai/service-chat/utilnow.pipe.mjs +10 -68
- package/esm2022/lib/aigc/service-fmai/service-imagine/imagine-func.mjs +9 -162
- package/esm2022/lib/aigc/service-fmai/service-imagine/imagine-work.mjs +10 -68
- package/esm2022/lib/aigc/service-fmai/service-imagine/imagine.service.mjs +8 -313
- package/esm2022/lib/aigc/service-fmai/service-imagine/index.mjs +10 -4
- package/esm2022/lib/aigc/story/fm-office-viewer/fm-office-viewer.component.mjs +10 -62
- package/esm2022/lib/aigc/story/fm-story-card/fm-story-card.component.mjs +10 -87
- package/esm2022/lib/aigc/story/fm-story-list/fm-story-list.component.mjs +10 -345
- package/esm2022/lib/aigc/story/fm-story-list/story-preview.mjs +10 -81
- package/esm2022/lib/aigc/story/fm-story-loader/fm-story-loader.component.mjs +10 -152
- package/esm2022/lib/aigc/story/fm-story-splitter/fm-story-splitter.component.mjs +10 -42
- package/esm2022/lib/aigc/story/index.mjs +10 -6
- package/esm2022/lib/aigc/story/modal-chat-story/comp-chat-story-json/comp-chat-story-json.component.mjs +10 -47
- package/esm2022/lib/aigc/story/modal-chat-story/comp-diary-story/comp-diary-story.component.mjs +10 -95
- package/esm2022/lib/aigc/story/modal-chat-story/modal-chat-story.component.mjs +10 -253
- package/esm2022/lib/aigc/story/story.service.mjs +10 -35
- package/esm2022/lib/aigc/voice/fmode-voice.service.mjs +10 -636
- package/esm2022/lib/aigc/voice/index.mjs +10 -7
- package/esm2022/lib/aigc/voice/lib/audio/audio.player.mjs +10 -55
- package/esm2022/lib/aigc/voice/lib/audio/audio.streamer.mjs +10 -2
- package/esm2022/lib/aigc/voice/lib/audio/streamer.microsoft.mjs +10 -96
- package/esm2022/lib/aigc/voice/lib/audio/streamer.pcm.mjs +8 -177
- package/esm2022/lib/aigc/voice/lib/pcm2wav.mjs +10 -38
- package/esm2022/lib/aigc/voice/lib/recorder/extension-waveview.mjs +10 -215
- package/esm2022/lib/aigc/voice/lib/resample.mjs +10 -34
- package/esm2022/lib/aigc/voice/tts/fmode-tts-class.mjs +10 -189
- package/esm2022/lib/aigc/voice/tts/index.mjs +10 -5
- package/esm2022/lib/aigc/voice/tts/int-tts-provider.mjs +10 -2
- package/esm2022/lib/aigc/voice/tts/provider-doubao.mjs +8 -346
- package/esm2022/lib/code/fm-codemirror/fm-codemirror.component.mjs +8 -342
- package/esm2022/lib/code/index.mjs +10 -2
- package/esm2022/lib/core/agent/chat/completion/fmode-completion.mjs +8 -430
- package/esm2022/lib/core/agent/chat/completion/index.mjs +10 -2
- package/esm2022/lib/core/agent/chat/completion/int-gpt-chat-options.mjs +10 -2
- package/esm2022/lib/core/agent/chat/fmode-chat.mjs +8 -617
- package/esm2022/lib/core/agent/chat/index.mjs +10 -4
- package/esm2022/lib/core/agent/chat/interface.mjs +10 -2
- package/esm2022/lib/core/agent/index.mjs +10 -6
- package/esm2022/lib/core/agent/prompt/agent.prompt.mjs +10 -133
- package/esm2022/lib/core/agent/prompt/index.mjs +10 -2
- package/esm2022/lib/core/agent/prompt/prompt-util.mjs +10 -16
- package/esm2022/lib/core/agent/story/agent.story.mjs +10 -64
- package/esm2022/lib/core/agent/story/index.mjs +10 -2
- package/esm2022/lib/core/agent/task/agent.task.mjs +10 -90
- package/esm2022/lib/core/agent/task/index.mjs +10 -2
- package/esm2022/lib/core/agent/waiting/index.mjs +10 -3
- package/esm2022/lib/core/agent/waiting/loading/loading.ctrl.mjs +10 -279
- package/esm2022/lib/core/agent/waiting/tips/tips.ctrl.mjs +8 -190
- package/esm2022/lib/core/index.mjs +10 -4
- package/esm2022/lib/core/parse/datatype/acl.mjs +10 -57
- package/esm2022/lib/core/parse/datatype/file.mjs +10 -69
- package/esm2022/lib/core/parse/datatype/geopoint.mjs +10 -57
- package/esm2022/lib/core/parse/datatype/relation.mjs +10 -56
- package/esm2022/lib/core/parse/fmode.cloud.mjs +10 -0
- package/esm2022/lib/core/parse/fmode.object.mjs +10 -232
- package/esm2022/lib/core/parse/fmode.parse.mjs +10 -84
- package/esm2022/lib/core/parse/fmode.query.mjs +8 -500
- package/esm2022/lib/core/parse/fmode.user.mjs +10 -275
- package/esm2022/lib/core/parse/index.mjs +10 -5
- package/esm2022/lib/core/parse/types.mjs +10 -2
- package/esm2022/lib/core/voice/index.mjs +10 -3
- package/esm2022/lib/core/voice/tts/index.mjs +10 -2
- package/esm2022/lib/icon/filetype/audio.svg.mjs +10 -3
- package/esm2022/lib/icon/filetype/avatar.svg.mjs +10 -14
- package/esm2022/lib/icon/filetype/chat.svg.mjs +10 -3
- package/esm2022/lib/icon/filetype/docx.svg.mjs +10 -3
- package/esm2022/lib/icon/filetype/file.svg.mjs +10 -3
- package/esm2022/lib/icon/filetype/filetype.pipe.mjs +10 -57
- package/esm2022/lib/icon/filetype/index.mjs +10 -12
- package/esm2022/lib/icon/filetype/md.svg.mjs +10 -3
- package/esm2022/lib/icon/filetype/pdf.svg.mjs +10 -3
- package/esm2022/lib/icon/filetype/pptx.svg.mjs +10 -3
- package/esm2022/lib/icon/filetype/svgtoblob.mjs +10 -8
- package/esm2022/lib/icon/filetype/video.svg.mjs +10 -3
- package/esm2022/lib/icon/filetype/xlsx.svg.mjs +10 -3
- package/esm2022/lib/icon/index.mjs +10 -2
- package/esm2022/lib/map/comp-poi-picker/comp-poi-picker.component.mjs +10 -209
- package/esm2022/lib/map/comp-poi-picker/comp-poi-picker.module.mjs +10 -33
- package/esm2022/lib/map/index.mjs +10 -4
- package/esm2022/lib/map/map.module.mjs +10 -61
- package/esm2022/lib/map/page-loca-scatter/page-loca-scatter.component.mjs +10 -132
- package/esm2022/lib/map/page-map.start/page-map.start.component.mjs +8 -115
- package/esm2022/lib/map/page-plan-route/page-plan-route.component.mjs +8 -118
- package/esm2022/lib/nova-cloud/index.mjs +10 -3
- package/esm2022/lib/nova-cloud/ncloud-api-func.mjs +10 -91
- package/esm2022/lib/nova-cloud/nova-cloud.service.mjs +10 -53
- package/esm2022/lib/payment/index.mjs +10 -2
- package/esm2022/lib/payment/payment/payment.component.mjs +10 -543
- package/esm2022/lib/payment/payment.service.mjs +10 -202
- package/esm2022/lib/person/comp-person-gender-icon/comp-person-gender-icon.component.mjs +10 -48
- package/esm2022/lib/person/comp-person-item/comp-person-item.component.mjs +10 -29
- package/esm2022/lib/person/comp-person-story/comp-person-story.component.mjs +10 -211
- package/esm2022/lib/person/edit-upload/edit-upload.component.mjs +8 -412
- package/esm2022/lib/person/edit-upload/edit-upload.module.mjs +10 -50
- package/esm2022/lib/person/index.mjs +10 -5
- package/esm2022/lib/person/modal-person-select/modal-person-select.component.mjs +10 -144
- package/esm2022/lib/person/modal-user-verify/secret-text.pipe.mjs +10 -41
- package/esm2022/lib/person/modal-user-verify/user-verify.component.mjs +10 -595
- package/esm2022/lib/person/person-detail/person-detail.component.mjs +10 -172
- package/esm2022/lib/person/person.service.mjs +8 -193
- package/esm2022/lib/platform/cross.service.mjs +10 -62
- package/esm2022/lib/platform/index.mjs +10 -2
- package/esm2022/lib/social/index.mjs +10 -2
- package/esm2022/lib/social/wechat/wechat-jssdk.service.mjs +8 -230
- package/esm2022/lib/storage/comp-hwobs-manager/hwobs-manager.component.mjs +10 -59
- package/esm2022/lib/storage/index.mjs +10 -5
- package/esm2022/lib/storage/service-hwobs/hwobs.service.mjs +8 -131
- package/esm2022/lib/storage/service-hwobs/index.mjs +10 -3
- package/esm2022/lib/storage/service-hwobs/typings/esdk-obs-browser.mjs +1 -1
- package/esm2022/lib/storage/service-upload/index.mjs +10 -2
- package/esm2022/lib/storage/service-upload/nova-upload.service.mjs +8 -513
- package/esm2022/lib/storage/service-upload/util-file-md5.mjs +10 -28
- package/esm2022/lib/storage/service-upload/util-file-metadata.mjs +10 -93
- package/esm2022/lib/storage/storage.module.mjs +10 -42
- package/esm2022/lib/text/fm-article-editor/article-editor-topbar/article-editor-topbar.component.mjs +10 -72
- package/esm2022/lib/text/fm-article-editor/article.service.mjs +10 -237
- package/esm2022/lib/text/fm-article-editor/comp-upload-book-banners/comp-upload-book-banners.component.mjs +8 -72
- package/esm2022/lib/text/fm-article-editor/draft.service.mjs +10 -207
- package/esm2022/lib/text/fm-article-editor/fm-article-aitool/fm-article-aitool.component.mjs +8 -227
- package/esm2022/lib/text/fm-article-editor/fm-article-draft/fm-article-draft.component.mjs +10 -303
- package/esm2022/lib/text/fm-article-editor/fm-article-editor.component.mjs +8 -371
- package/esm2022/lib/text/fm-article-editor/fm-article-outline/fm-article-outline.component.mjs +10 -94
- package/esm2022/lib/text/fm-article-editor/fm-article-outline-leftitem/fm-article-outline-leftitem.component.mjs +10 -36
- package/esm2022/lib/text/fm-article-editor/fm-article-preview/fm-article-preview.component.mjs +10 -281
- package/esm2022/lib/text/fm-article-editor/fm-article-write-options/fm-article-write-options.component.mjs +10 -72
- package/esm2022/lib/text/fm-article-editor/outline-count.pipe.mjs +10 -22
- package/esm2022/lib/text/fm-article-editor/prompt/prompt-insertion-article.mjs +10 -169
- package/esm2022/lib/text/fm-article-editor/task-article-generation.mjs +10 -69
- package/esm2022/lib/text/fm-article-editor/tasks/task-article-draft-create.mjs +10 -65
- package/esm2022/lib/text/fm-article-editor/tasks/task-article-outline-edit.mjs +10 -55
- package/esm2022/lib/text/fm-article-editor/tasks/task-article-outline.mjs +10 -142
- package/esm2022/lib/text/fm-article-editor/tasks/task-article-preview.mjs +10 -35
- package/esm2022/lib/text/fm-article-editor/tasks/task-article-writing-options.mjs +10 -81
- package/esm2022/lib/text/fm-article-editor/tasks/task-document-select.mjs +10 -50
- package/esm2022/lib/text/fm-text-quill/fm-text-quill.component.mjs +10 -145
- package/esm2022/lib/text/index.mjs +10 -4
- package/esm2022/lib/user/account/account.service.mjs +10 -222
- package/esm2022/lib/user/captcha/captcha.component.mjs +10 -135
- package/esm2022/lib/user/comp-user-avatar/comp-user-avatar.component.mjs +10 -66
- package/esm2022/lib/user/index.mjs +10 -17
- package/esm2022/lib/user/login/auth.guard.mjs +10 -28
- package/esm2022/lib/user/login/auth.service.mjs +8 -433
- package/esm2022/lib/user/login/login.component.mjs +10 -916
- package/esm2022/lib/user/modal-user-login/modal-user-login.component.mjs +10 -311
- package/esm2022/lib/user/profile/auth-profile.guard.mjs +10 -27
- package/esm2022/lib/user/profile/auth-profile.service.mjs +10 -122
- package/esm2022/lib/user/profile/profile-bind/profile-bind.component.mjs +10 -164
- package/esm2022/lib/user/profile/profile-bind/profile-confirm-modal.component.mjs +10 -79
- package/esm2022/lib/user/profile/profile.module.mjs +10 -54
- package/esm2022/lib/user/staff/index.mjs +10 -4
- package/esm2022/lib/user/staff/staff.guard.mjs +10 -26
- package/esm2022/lib/user/staff/staff.module.mjs +10 -18
- package/esm2022/lib/user/staff/staff.service.mjs +10 -85
- package/esm2022/lib/user/user-name.pipe.mjs +10 -29
- package/esm2022/lib/user/user.module.mjs +10 -102
- package/esm2022/lib/video/fm-video/fm-video.component.mjs +10 -67
- package/esm2022/lib/video/index.mjs +10 -2
- package/esm2022/public-api.mjs +10 -21
- package/fesm2022/fmode-ng.mjs +7 -19788
- package/fesm2022/fmode-ng.mjs.map +1 -1
- package/lib/aigc/avatar/comp-avatar-role-image/comp-avatar-role-image.component.d.ts +2 -2
- package/lib/aigc/avatar/comp-avatar-role-video/comp-avatar-role-video.component.d.ts +2 -2
- package/lib/aigc/avatar/comp-avatar-talk/comp-avatar-talk.component.d.ts +2 -2
- package/lib/aigc/chat/chat-list/chat-list.component.d.ts +3 -2
- package/lib/aigc/chat/chat-message-card/comp-message-card.component.d.ts +3 -3
- package/lib/aigc/chat/chat-modal-input/modal-audio-message/modal-audio-message.component.d.ts +2 -2
- package/lib/aigc/chat/chat-modal-input/modal-input.component.d.ts +3 -3
- package/lib/aigc/service-fmai/service-imagine/imagine-func.d.ts +3 -3
- package/lib/aigc/service-fmai/service-imagine/imagine-work.d.ts +4 -4
- package/lib/aigc/service-fmai/service-imagine/imagine.service.d.ts +6 -6
- package/lib/aigc/story/fm-office-viewer/fm-office-viewer.component.d.ts +2 -2
- package/lib/aigc/story/fm-story-card/fm-story-card.component.d.ts +2 -1
- package/lib/aigc/story/fm-story-list/fm-story-list.component.d.ts +6 -6
- package/lib/aigc/story/fm-story-list/story-preview.d.ts +4 -4
- package/lib/aigc/story/fm-story-loader/fm-story-loader.component.d.ts +3 -3
- package/lib/aigc/story/fm-story-splitter/fm-story-splitter.component.d.ts +2 -2
- package/lib/aigc/story/modal-chat-story/comp-chat-story-json/comp-chat-story-json.component.d.ts +3 -2
- package/lib/aigc/story/modal-chat-story/comp-diary-story/comp-diary-story.component.d.ts +3 -2
- package/lib/aigc/story/modal-chat-story/modal-chat-story.component.d.ts +6 -6
- package/lib/aigc/story/story.service.d.ts +3 -2
- package/lib/aigc/voice/tts/fmode-tts-class.d.ts +2 -2
- package/lib/core/agent/chat/fmode-chat.d.ts +11 -11
- package/lib/core/agent/story/agent.story.d.ts +8 -8
- package/lib/core/parse/datatype/geopoint.d.ts +5 -1
- package/lib/core/parse/fmode.cloud.d.ts +32 -0
- package/lib/core/parse/fmode.object.d.ts +2 -2
- package/lib/core/parse/fmode.parse.d.ts +15 -9
- package/lib/core/parse/fmode.query.d.ts +41 -2
- package/lib/core/parse/fmode.user.d.ts +1 -0
- package/lib/core/parse/index.d.ts +1 -0
- package/lib/core/parse/types.d.ts +2 -0
- package/lib/map/comp-poi-picker/comp-poi-picker.component.d.ts +5 -5
- package/lib/payment/payment/payment.component.d.ts +3 -3
- package/lib/payment/payment.service.d.ts +4 -4
- package/lib/person/comp-person-gender-icon/comp-person-gender-icon.component.d.ts +2 -1
- package/lib/person/comp-person-item/comp-person-item.component.d.ts +2 -1
- package/lib/person/comp-person-story/comp-person-story.component.d.ts +13 -13
- package/lib/person/edit-upload/edit-upload.component.d.ts +1 -1
- package/lib/person/modal-person-select/modal-person-select.component.d.ts +5 -5
- package/lib/person/modal-user-verify/user-verify.component.d.ts +5 -5
- package/lib/person/person-detail/person-detail.component.d.ts +4 -4
- package/lib/person/person.service.d.ts +7 -7
- package/lib/storage/service-hwobs/hwobs.service.d.ts +4 -5
- package/lib/storage/service-upload/nova-upload.service.d.ts +5 -5
- package/lib/text/fm-article-editor/article-editor-topbar/article-editor-topbar.component.d.ts +2 -1
- package/lib/text/fm-article-editor/article.service.d.ts +12 -12
- package/lib/text/fm-article-editor/draft.service.d.ts +5 -5
- package/lib/text/fm-article-editor/fm-article-aitool/fm-article-aitool.component.d.ts +3 -2
- package/lib/text/fm-article-editor/fm-article-draft/fm-article-draft.component.d.ts +16 -17
- package/lib/text/fm-article-editor/fm-article-editor.component.d.ts +3 -3
- package/lib/text/fm-article-editor/fm-article-outline/fm-article-outline.component.d.ts +11 -10
- package/lib/text/fm-article-editor/fm-article-preview/fm-article-preview.component.d.ts +2 -2
- package/lib/text/fm-article-editor/prompt/prompt-insertion-article.d.ts +3 -3
- package/lib/text/fm-article-editor/task-article-generation.d.ts +5 -4
- package/lib/text/fm-article-editor/tasks/task-article-draft-create.d.ts +3 -3
- package/lib/text/fm-article-editor/tasks/task-article-outline-edit.d.ts +3 -3
- package/lib/text/fm-article-editor/tasks/task-article-outline.d.ts +3 -3
- package/lib/text/fm-article-editor/tasks/task-article-preview.d.ts +2 -1
- package/lib/text/fm-article-editor/tasks/task-article-writing-options.d.ts +3 -3
- package/lib/text/fm-article-editor/tasks/task-document-select.d.ts +3 -3
- package/lib/user/account/account.service.d.ts +2 -2
- package/lib/user/comp-user-avatar/comp-user-avatar.component.d.ts +2 -2
- package/lib/user/login/auth.service.d.ts +5 -5
- package/lib/user/login/login.component.d.ts +3 -3
- package/lib/user/profile/auth-profile.service.d.ts +8 -8
- package/lib/user/profile/profile-bind/profile-bind.component.d.ts +7 -7
- package/lib/user/profile/profile-bind/profile-confirm-modal.component.d.ts +2 -2
- package/lib/user/staff/staff.service.d.ts +3 -3
- package/lib/user/user-name.pipe.d.ts +2 -2
- package/package.json +12 -18
|
@@ -1,207 +1,10 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
import
|
|
9
|
-
|
|
10
|
-
|
|
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
|
+
|