This is an automated email from the ASF dual-hosted git repository.
linkinstar pushed a change to branch meta
in repository https://gitbox.apache.org/repos/asf/answer.git
from bcbae259 Merge remote-tracking branch 'origin/main' into meta
add 59408774 fix(lang): correct translations in Polish and Turkish
language files
add b5ae2d03 fix: admin/themes add layout config
add 2ae309ab fix: delete log
add 92d853ce fix: add i18n
add f92d3a34 fix: update zh_CN.ymal content
add c8881889 fix: admin.themes layout initial value
add c2a62804 fix: add feedback after successfully adding a user in admin
panel (#1462)
add d3a29e7a feat(theme): add layout options for site theme configuration
add 462931a3 Merge remote-tracking branch 'origin/feat/1.7.2/layout' into
test
add cf7f601c Merge branch 'test' of github.com:apache/answer into test
add 9ef55ca0 feat(editor): integrate TipTap WYSIWYG editor with Markdown
support and enhance editor functionalities
add 762773ce chore: clean up pnpm-lock.yaml by removing unused
dependencies and updating existing ones
add 3d437005 refactor(editor): streamline editor component structure and
enhance command methods
add 498c1421 feat(editor): rename WYSIWYG editor to Rich editor and
implement new RichEditor component
add d87726bd refactor(editor): enhance editor components with base props
and initialization logic
add 7a4b57d1 refactor(editor): improve editor component functionality and
code clarity
add ffa8dc2b feat(editor): update TipTap dependencies and enhance table
functionality
add 1c2c7331 feat(editor): enhance plugin system and improve command
methods
add 0bad2c72 chore(dependencies): update TipTap packages to version 3.13.0
add aa7e19b8 Remove TipTap editor utility files including commands,
constants, error handling, events, position conversion, and table extension to
streamline the editor's functionality and reduce code complexity.
add 78714e83 feat(editor): implement image upload functionality with
validation and hooks
add 762e8a73 fix(gitignore): correct node_modules entry and remove
specific plugin exceptions
add 9e236f65 Merge remote-tracking branch 'origin/feat/1.7.2/ui' into test
add 61d9bf34 修复最佳评论越权问题
add 42f8947e fix(notification): use SSO provider for external_id lookup in
notifications
add c8908b7b fix(review): notifications from the specific external system
will take precedence
add 57f31ec7 fix: expand avatar column length from 1024 to 2048
add a1f0b096 fix: update migration version from v1.7.1 to v1.7.2
add d5c07f18 Merge remote-tracking branch 'origin/dev' into test
add d7d692bb fix: Fixed-layout navigation aligns with the width of the
main content.
add 26d868b1 refactor(queue): improve queues
add 5ff6106d fix: address comments and add a test
add 1fbb802e feat: load optional .env file and add .env.example
add d773b869 fix: remove unrelated generated files
add f6d30a5b chore: revert documentation changes in README
add 3d546533 fix: added the init fuction in install_main.go
add 5be6ec9e docs(lic): add MIT license file and clean up init function in
install_main.go
add 6b834c74 Merge remote-tracking branch 'origin/dev' into test
add f05f1eb8 feat(menu): update admin menu settings to include questions,
tags, and advanced options
add 9efa9471 feat(menu): update admin menu settings to include questions,
tags, and advanced options
add c2a0bee7 feat(siteinfo): add users settings endpoint and update
interface settings structure
add 3264fdd1 feat(siteinfo): refactor site legal and security settings to
use new policies and security endpoints
add 128c44f5 feat(menu): update schema to remove deprecated min_tags and
add MinimumTags to SiteQuestionsReq
add 63690569 feat(siteinfo): fix GetSiteTag method to correctly assign
response from siteInfoCommonService
add 18b76f3e feat(siteinfo): add site_security to response structure and
update related schemas
add 73cfbace feat(menu): deprecate default_avatar and gravatar_base_url in
SiteInterfaceReq schema
add 86c2d64d feat(docs): add Apache License 2.0 header to docs.go and
swagger.yaml
add 29ec29bd feat(menu): update admin menu settings to include questions,
tags, and advanced options
add 3cd3e4a8 feat(menu): update admin menu settings to include questions,
tags, and advanced options
add 0d7979e9 feat(siteinfo): add users settings endpoint and update
interface settings structure
add f0636d43 feat(siteinfo): refactor site legal and security settings to
use new policies and security endpoints
add 94de2136 feat(menu): update schema to remove deprecated min_tags and
add MinimumTags to SiteQuestionsReq
add 0bb33e7e feat(siteinfo): fix GetSiteTag method to correctly assign
response from siteInfoCommonService
add 60f8cd18 feat(siteinfo): add site_security to response structure and
update related schemas
add 81511e38 feat(menu): deprecate default_avatar and gravatar_base_url in
SiteInterfaceReq schema
add 8b8550e9 feat(docs): add Apache License 2.0 header to docs.go and
swagger.yaml
add d65e257f feat(docs): add Apache License 2.0 header to wire_gen.go
add f3dddfeb Merge remote-tracking branch 'origin/feat/1.8.0/menu' into
feat/1.8.0/menu
add 630ac20a Management Backend Menu and Function Adjustments (#1474)
add 2d02452e fix: Changes in the editor content will reset the values of
other form fields.
add 06e9d437 fix: Changes in the editor content will reset the values of
other form fields.
add c509723f feat(docs): add layout property with enum options to schema
definitions
add dc7f7521 Support AI Assistant and MCP functions (#1477)
add ce5aadf3 feat: add AI configuration support with related controllers
and services
add 94c03082 fix: correct loop iteration in AI conversation rounds
add f403eadb feat: add AI conversation management endpoints and update
related schemas
add cc1567ac fix: Fix incorrect default value when the input type is
number in SchemeForm.
add ef54781b fix: mcp menu moved to ai assistant
add 9ea13af8 feat(revision): enhance revision management with object
status handling
add b83d0214 feat(ci): add lint action
add bdd1949a Merge remote-tracking branch 'origin/dev' into test
add 8b61cad0 fix(lint): resolve the lint issue
add c1549d29 feat: add AI configuration support with related controllers
and services
add 9fbf9e4f fix: correct loop iteration in AI conversation rounds
add 2a99d234 Merge remote-tracking branch 'origin/feat/1.8.0/new-cp-fe'
into test
add a5edc4fc feat: add advanced site settings and related API endpoints
add 4fd96675 fix: improve Brotli compression handling and validate user
input in vote status
add 34c1e8a3 docs(Makefile): upgrade version to 2.0.0
add 7dfb8b32 New translations (#1486)
new eba56dbf Merge remote-tracking branch 'origin/main' into meta
add e5cb38bd chore: add license files and update Go version to 1.24.0
new 78c36f71 Merge remote-tracking branch 'origin/main' into meta
add b522a168 feat: add GetConfigByKeyFromDB method to retrieve config
directly
new d48615a2 Merge remote-tracking branch 'origin/main' into meta
The 3 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails. The revisions
listed as "add" were already present in the repository and have only
been added to this reference.
Summary of changes:
.env.example | 36 +
.../workflows/{check-asf-header.yml => lint.yml} | 56 +-
.gitignore | 3 +
Dockerfile | 2 +-
Makefile | 2 +-
README.md | 2 +-
cmd/main.go | 6 +
cmd/wire_gen.go | 71 +-
docs/docs.go | 2528 +++++++++++++++-----
...n-classnames.txt => LICENSE-go-resty-resty.txt} | 2 +-
...178-js-sha256.txt => LICENSE-joho-godotenv.txt} | 2 +-
...aggo-files.txt => LICENSE-mark3labs-mcp-go.txt} | 2 +-
.../licenses/LICENSE-sashabaranov-go-openai.txt | 0
docs/swagger.json | 2528 +++++++++++++++-----
docs/swagger.yaml | 1181 +++++++--
go.mod | 13 +-
go.sum | 24 +-
i18n/cs_CZ.yaml | 95 +-
i18n/cy_GB.yaml | 93 +-
i18n/da_DK.yaml | 783 +++---
i18n/de_DE.yaml | 93 +-
i18n/en_US.yaml | 93 +-
i18n/es_ES.yaml | 93 +-
i18n/fa_IR.yaml | 93 +-
i18n/fr_FR.yaml | 93 +-
i18n/hi_IN.yaml | 93 +-
i18n/id_ID.yaml | 97 +-
i18n/it_IT.yaml | 93 +-
i18n/ja_JP.yaml | 309 ++-
i18n/ko_KR.yaml | 93 +-
i18n/ml_IN.yaml | 93 +-
i18n/pl_PL.yaml | 636 ++---
i18n/pt_PT.yaml | 93 +-
i18n/ro_RO.yaml | 93 +-
i18n/ru_RU.yaml | 106 +-
i18n/sk_SK.yaml | 93 +-
i18n/sv_SE.yaml | 101 +-
i18n/te_IN.yaml | 93 +-
i18n/tr_TR.yaml | 127 +-
i18n/uk_UA.yaml | 93 +-
i18n/vi_VN.yaml | 93 +-
i18n/zh_CN.yaml | 95 +-
i18n/zh_TW.yaml | 93 +-
internal/base/constant/ai_config.go | 49 +
internal/base/constant/site_info.go | 3 +
internal/base/constant/site_type.go | 21 +-
internal/base/middleware/auth.go | 4 +-
.../{user_center_plugin_auth.go => mcp_auth.go} | 25 +-
internal/base/middleware/visit_img_auth.go | 4 +-
internal/base/queue/queue.go | 130 +
internal/base/queue/queue_test.go | 253 ++
internal/base/reason/reason.go | 1 +
internal/base/server/http.go | 8 +-
internal/base/translator/provider.go | 6 +-
internal/controller/ai_controller.go | 756 ++++++
internal/controller/ai_conversation_controller.go | 130 +
internal/controller/answer_controller.go | 2 +-
internal/controller/controller.go | 3 +
internal/controller/mcp_controller.go | 351 +++
internal/controller/revision_controller.go | 2 +
internal/controller/siteinfo_controller.go | 29 +-
internal/controller/template_controller.go | 8 +-
.../ai_conversation_admin_controller.go | 123 +
internal/controller_admin/controller.go | 2 +
internal/controller_admin/e_api_key_controller.go | 116 +
internal/controller_admin/siteinfo_controller.go | 290 ++-
.../entity/{power_entity.go => ai_conversation.go} | 22 +-
internal/entity/ai_conversation_record.go | 40 +
.../entity/{power_entity.go => api_key_entity.go} | 27 +-
internal/entity/user_entity.go | 2 +-
internal/install/install_main.go | 8 +-
internal/migrations/init.go | 87 +-
internal/migrations/migrations.go | 3 +
internal/migrations/{v1.go => v29.go} | 12 +-
internal/migrations/v30.go | 396 +++
internal/migrations/v31.go | 116 +
internal/migrations/v5.go | 3 +-
internal/repo/activity/answer_repo.go | 6 +-
internal/repo/activity/vote_repo.go | 6 +-
internal/repo/activity_common/vote.go | 6 +
.../repo/ai_conversation/ai_conversation_repo.go | 205 ++
internal/repo/api_key/api_key_repo.go | 83 +
internal/repo/config/config_repo.go | 12 +
internal/repo/provider.go | 4 +
internal/repo/site_info/siteinfo_repo.go | 10 +-
.../user_external_login_repo.go | 2 +-
internal/router/answer_api_router.go | 186 +-
.../ai_config_schema.go} | 36 +-
internal/schema/ai_conversation_schema.go | 123 +
internal/schema/api_key_schema.go | 60 +
internal/schema/mcp_schema.go | 194 ++
internal/schema/mcp_tools/mcp_tools.go | 105 +
internal/schema/revision_schema.go | 2 +
internal/schema/simple_obj_info_schema.go | 3 +
internal/schema/siteinfo_schema.go | 175 +-
internal/service/activity_common/activity.go | 6 +-
internal/service/activity_queue/activity_queue.go | 69 -
.../reason.go => activityqueue/activity_queue.go} | 11 +-
.../ai_conversation/ai_conversation_service.go | 372 +++
internal/service/apikey/apikey_service.go | 116 +
internal/service/badge/badge_award_service.go | 6 +-
internal/service/badge/badge_event_handler.go | 6 +-
internal/service/comment/comment_service.go | 22 +-
internal/service/config/config_service.go | 10 +
internal/service/content/answer_service.go | 27 +-
internal/service/content/question_service.go | 22 +-
internal/service/content/revision_service.go | 29 +-
internal/service/content/user_service.go | 6 +-
internal/service/content/vote_service.go | 6 +-
internal/service/dashboard/dashboard_service.go | 17 +-
internal/service/event_queue/event_queue.go | 69 -
.../reason.go => eventqueue/event_queue.go} | 11 +-
.../feature_toggle/feature_toggle_service.go | 130 +
internal/service/meta/meta_service.go | 6 +-
internal/service/mock/siteinfo_repo_mock.go | 150 +-
.../notice_queue/external_notification_queue.go | 69 -
internal/service/notice_queue/notice_queue.go | 69 -
.../noticequeue/notice_queue.go} | 17 +-
.../service/notification/external_notification.go | 6 +-
.../notification/new_question_notification.go | 13 +
.../service/notification_common/notification.go | 13 +-
internal/service/object_info/object_info.go | 12 +-
.../service/plugin_common/plugin_common_service.go | 2 +-
internal/service/provider.go | 20 +-
internal/service/question_common/question.go | 8 +-
internal/service/report/report_service.go | 6 +-
internal/service/review/review_service.go | 10 +-
internal/service/siteinfo/siteinfo_service.go | 331 ++-
.../service/siteinfo_common/siteinfo_service.go | 98 +-
internal/service/tag/tag_service.go | 6 +-
internal/service/tag_common/tag_common.go | 14 +-
internal/service/uploader/upload.go | 32 +-
plugin/config.go | 6 +-
script/check-asf-header.sh | 2 +-
ui/.gitignore | 4 +-
ui/package.json | 1 +
ui/pnpm-lock.yaml | 384 ++-
ui/src/common/constants.ts | 66 +-
ui/src/common/interface.ts | 109 +-
ui/src/components/AccordionNav/index.tsx | 65 +-
ui/src/components/AdminSideNav/index.tsx | 13 +-
ui/src/components/BubbleAi/index.tsx | 259 ++
.../{Modal/login.scss => BubbleUser/index.scss} | 9 +-
.../index.tsx | 19 +-
ui/src/components/Customize/index.tsx | 35 +
ui/src/components/Editor/EditorContext.ts | 4 +-
ui/src/components/Editor/MarkdownEditor.tsx | 98 +
ui/src/components/Editor/ToolBars/blockquote.tsx | 21 +-
ui/src/components/Editor/ToolBars/bold.tsx | 10 +-
ui/src/components/Editor/ToolBars/chart.tsx | 181 --
ui/src/components/Editor/ToolBars/code.tsx | 32 +-
ui/src/components/Editor/ToolBars/file.tsx | 15 +-
ui/src/components/Editor/ToolBars/heading.tsx | 24 +-
ui/src/components/Editor/ToolBars/hr.tsx | 11 +-
ui/src/components/Editor/ToolBars/image.tsx | 199 +-
ui/src/components/Editor/ToolBars/indent.tsx | 15 +-
ui/src/components/Editor/ToolBars/index.ts | 2 -
ui/src/components/Editor/ToolBars/italic.tsx | 11 +-
ui/src/components/Editor/ToolBars/link.tsx | 27 +-
ui/src/components/Editor/ToolBars/ol.tsx | 19 +-
ui/src/components/Editor/ToolBars/outdent.tsx | 16 +-
ui/src/components/Editor/ToolBars/table.tsx | 67 +-
ui/src/components/Editor/ToolBars/ul.tsx | 19 +-
ui/src/components/Editor/hooks/useImageUpload.ts | 129 +
ui/src/components/Editor/index.scss | 36 +
ui/src/components/Editor/index.tsx | 165 +-
ui/src/components/Editor/toolItem.tsx | 42 +-
ui/src/components/Editor/types.ts | 56 +-
.../components/Editor/utils/codemirror/adapter.ts | 59 +
ui/src/components/Editor/utils/codemirror/base.ts | 110 +
.../components/Editor/utils/codemirror/commands.ts | 279 +++
.../components/Editor/utils/codemirror/events.ts | 98 +
ui/src/components/Editor/utils/extension.ts | 255 --
ui/src/components/Editor/utils/index.ts | 32 +-
ui/src/components/Header/index.scss | 21 +
ui/src/components/Header/index.tsx | 8 +-
ui/src/components/Modal/Modal.tsx | 6 +-
ui/src/components/PluginRender/index.tsx | 105 +-
ui/src/components/SchemaForm/components/Input.tsx | 6 +-
ui/src/components/SchemaForm/components/Switch.tsx | 3 +-
ui/src/components/SchemaForm/index.tsx | 8 +-
ui/src/components/SchemaForm/types.ts | 2 +-
.../Settings => components/Sender}/index.scss | 38 +-
ui/src/components/Sender/index.tsx | 172 ++
ui/src/components/SideNav/index.tsx | 14 +-
.../{pages/Legal => components/TabNav}/index.tsx | 38 +-
ui/src/components/index.ts | 8 +
ui/src/pages/{ => 404}/403/index.tsx | 0
.../Admin/AiAssistant/components/Action/index.tsx | 72 +
.../AiAssistant/components/DetailModal/index.tsx | 86 +
ui/src/pages/Admin/AiAssistant/index.tsx | 130 +
ui/src/pages/Admin/AiSettings/index.tsx | 486 ++++
ui/src/pages/Admin/Answers/index.tsx | 8 +-
.../components/Action/index.tsx | 62 +-
.../Apikeys/components/AddOrEditModal/index.tsx | 184 ++
.../Apikeys/components/CreatedModal}/index.tsx | 48 +-
.../Apikeys}/components/index.ts | 7 +-
ui/src/pages/Admin/Apikeys/index.tsx | 138 ++
ui/src/pages/Admin/Branding/index.tsx | 16 +-
ui/src/pages/Admin/CssAndHtml/index.tsx | 16 +-
.../Dashboard/components/HealthStatus/index.tsx | 6 +-
ui/src/pages/Admin/Files/index.tsx | 261 ++
ui/src/pages/Admin/General/index.tsx | 29 +-
ui/src/pages/Admin/Interface/index.tsx | 75 +-
ui/src/pages/Admin/Login/index.tsx | 30 +-
ui/src/pages/Admin/Mcp/index.tsx | 113 +
ui/src/pages/Admin/Plugins/Config/index.tsx | 18 +-
ui/src/pages/Admin/{Legal => Policies}/index.tsx | 63 +-
ui/src/pages/Admin/Privileges/index.tsx | 32 +-
ui/src/pages/Admin/QaSettings/index.tsx | 153 ++
ui/src/pages/Admin/Questions/index.tsx | 4 +-
ui/src/pages/Admin/{Legal => Security}/index.tsx | 126 +-
ui/src/pages/Admin/Seo/index.tsx | 16 +-
ui/src/pages/Admin/Smtp/index.tsx | 16 +-
ui/src/pages/Admin/TagsSettings/index.tsx | 189 ++
ui/src/pages/Admin/Themes/index.tsx | 28 +-
ui/src/pages/Admin/Users/index.tsx | 14 +-
.../Admin/{Interface => UsersSettings}/index.tsx | 138 +-
ui/src/pages/Admin/Write/index.tsx | 473 ----
ui/src/pages/Admin/index.scss | 4 +
ui/src/pages/Admin/index.tsx | 16 +-
.../components/ConversationList/index.tsx | 70 +
ui/src/pages/AiAssistant/index.tsx | 380 +++
ui/src/pages/Layout/index.tsx | 14 +-
ui/src/pages/Questions/Ask/index.tsx | 12 +-
ui/src/pages/Questions/Detail/index.scss | 9 +-
ui/src/pages/Questions/EditAnswer/index.tsx | 8 +-
ui/src/pages/Search/components/AiCard/index.tsx | 189 ++
ui/src/pages/Search/components/index.ts | 3 +-
ui/src/pages/Search/index.tsx | 4 +
.../index.tsx | 17 +-
ui/src/pages/Tags/Create/index.tsx | 8 +-
ui/src/pages/Tags/Edit/index.tsx | 8 +-
ui/src/pages/Users/Settings/Profile/index.tsx | 10 +-
ui/src/router/routes.ts | 72 +-
ui/src/services/{client/badges.ts => admin/ai.ts} | 65 +-
ui/src/services/admin/{question.ts => apikeys.ts} | 27 +-
ui/src/services/admin/index.ts | 4 +
.../services.ts => services/admin/mcp.ts} | 27 +-
ui/src/services/admin/question.ts | 10 +
ui/src/services/admin/settings.ts | 38 +-
.../services/{client/search.ts => admin/tags.ts} | 10 +-
ui/src/services/admin/users.ts | 19 +
.../services/{admin/question.ts => client/ai.ts} | 32 +-
ui/src/services/client/index.ts | 1 +
ui/src/stores/{siteLegal.ts => aiControl.ts} | 16 +-
ui/src/stores/index.ts | 6 +-
ui/src/stores/interface.ts | 4 +-
ui/src/stores/loginSetting.ts | 1 -
ui/src/stores/siteInfo.ts | 3 +-
ui/src/stores/{siteLegal.ts => siteSecurity.ts} | 16 +-
ui/src/stores/themeSetting.ts | 2 +
ui/src/stores/writeSetting.ts | 12 +-
ui/src/utils/guard.ts | 17 +-
ui/src/utils/pluginKit/index.ts | 143 +-
ui/src/utils/pluginKit/interface.ts | 2 +
ui/src/utils/requestAi.ts | 319 +++
257 files changed, 19375 insertions(+), 5148 deletions(-)
create mode 100644 .env.example
copy .github/workflows/{check-asf-header.yml => lint.yml} (56%)
copy docs/release/licenses/{LICENSE-JedWatson-classnames.txt =>
LICENSE-go-resty-resty.txt} (92%)
copy docs/release/licenses/{LICENSE-emn178-js-sha256.txt =>
LICENSE-joho-godotenv.txt} (96%)
copy docs/release/licenses/{LICENSE-swaggo-files.txt =>
LICENSE-mark3labs-mcp-go.txt} (96%)
copy LICENSE => docs/release/licenses/LICENSE-sashabaranov-go-openai.txt (100%)
create mode 100644 internal/base/constant/ai_config.go
copy internal/base/middleware/{user_center_plugin_auth.go => mcp_auth.go} (68%)
create mode 100644 internal/base/queue/queue.go
create mode 100644 internal/base/queue/queue_test.go
create mode 100644 internal/controller/ai_controller.go
create mode 100644 internal/controller/ai_conversation_controller.go
create mode 100644 internal/controller/mcp_controller.go
create mode 100644
internal/controller_admin/ai_conversation_admin_controller.go
create mode 100644 internal/controller_admin/e_api_key_controller.go
copy internal/entity/{power_entity.go => ai_conversation.go} (57%)
create mode 100644 internal/entity/ai_conversation_record.go
copy internal/entity/{power_entity.go => api_key_entity.go} (54%)
copy internal/migrations/{v1.go => v29.go} (74%)
create mode 100644 internal/migrations/v30.go
create mode 100644 internal/migrations/v31.go
create mode 100644 internal/repo/ai_conversation/ai_conversation_repo.go
create mode 100644 internal/repo/api_key/api_key_repo.go
copy internal/{service/role/power_service.go => schema/ai_config_schema.go}
(53%)
create mode 100644 internal/schema/ai_conversation_schema.go
create mode 100644 internal/schema/api_key_schema.go
create mode 100644 internal/schema/mcp_schema.go
create mode 100644 internal/schema/mcp_tools/mcp_tools.go
delete mode 100644 internal/service/activity_queue/activity_queue.go
copy internal/service/{reason_common/reason.go =>
activityqueue/activity_queue.go} (81%)
create mode 100644 internal/service/ai_conversation/ai_conversation_service.go
create mode 100644 internal/service/apikey/apikey_service.go
delete mode 100644 internal/service/event_queue/event_queue.go
copy internal/service/{reason_common/reason.go => eventqueue/event_queue.go}
(82%)
create mode 100644 internal/service/feature_toggle/feature_toggle_service.go
delete mode 100644 internal/service/notice_queue/external_notification_queue.go
delete mode 100644 internal/service/notice_queue/notice_queue.go
copy internal/{controller/template_render/answer.go =>
service/noticequeue/notice_queue.go} (68%)
create mode 100644 ui/src/components/BubbleAi/index.tsx
copy ui/src/components/{Modal/login.scss => BubbleUser/index.scss} (88%)
copy ui/src/components/{InitialLoadingPlaceholder => BubbleUser}/index.tsx
(73%)
create mode 100644 ui/src/components/Editor/MarkdownEditor.tsx
delete mode 100644 ui/src/components/Editor/ToolBars/chart.tsx
create mode 100644 ui/src/components/Editor/hooks/useImageUpload.ts
create mode 100644 ui/src/components/Editor/utils/codemirror/adapter.ts
create mode 100644 ui/src/components/Editor/utils/codemirror/base.ts
create mode 100644 ui/src/components/Editor/utils/codemirror/commands.ts
create mode 100644 ui/src/components/Editor/utils/codemirror/events.ts
delete mode 100644 ui/src/components/Editor/utils/extension.ts
copy ui/src/{pages/Users/Settings => components/Sender}/index.scss (68%)
create mode 100644 ui/src/components/Sender/index.tsx
copy ui/src/{pages/Legal => components/TabNav}/index.tsx (62%)
rename ui/src/pages/{ => 404}/403/index.tsx (100%)
create mode 100644 ui/src/pages/Admin/AiAssistant/components/Action/index.tsx
create mode 100644
ui/src/pages/Admin/AiAssistant/components/DetailModal/index.tsx
create mode 100644 ui/src/pages/Admin/AiAssistant/index.tsx
create mode 100644 ui/src/pages/Admin/AiSettings/index.tsx
copy ui/src/pages/Admin/{Answers => Apikeys}/components/Action/index.tsx (50%)
create mode 100644
ui/src/pages/Admin/Apikeys/components/AddOrEditModal/index.tsx
copy ui/src/pages/{Maintenance =>
Admin/Apikeys/components/CreatedModal}/index.tsx (53%)
copy ui/src/pages/{Users/Notifications => Admin/Apikeys}/components/index.ts
(82%)
create mode 100644 ui/src/pages/Admin/Apikeys/index.tsx
create mode 100644 ui/src/pages/Admin/Files/index.tsx
create mode 100644 ui/src/pages/Admin/Mcp/index.tsx
copy ui/src/pages/Admin/{Legal => Policies}/index.tsx (70%)
create mode 100644 ui/src/pages/Admin/QaSettings/index.tsx
rename ui/src/pages/Admin/{Legal => Security}/index.tsx (56%)
create mode 100644 ui/src/pages/Admin/TagsSettings/index.tsx
copy ui/src/pages/Admin/{Interface => UsersSettings}/index.tsx (53%)
delete mode 100644 ui/src/pages/Admin/Write/index.tsx
create mode 100644
ui/src/pages/AiAssistant/components/ConversationList/index.tsx
create mode 100644 ui/src/pages/AiAssistant/index.tsx
create mode 100644 ui/src/pages/Search/components/AiCard/index.tsx
copy ui/src/pages/{SideNavLayout => SideNavLayoutWithoutFooter}/index.tsx (69%)
copy ui/src/services/{client/badges.ts => admin/ai.ts} (54%)
copy ui/src/services/admin/{question.ts => apikeys.ts} (66%)
copy ui/src/{plugins/builtin/SearchInfo/services.ts => services/admin/mcp.ts}
(72%)
copy ui/src/services/{client/search.ts => admin/tags.ts} (77%)
copy ui/src/services/{admin/question.ts => client/ai.ts} (62%)
copy ui/src/stores/{siteLegal.ts => aiControl.ts} (74%)
rename ui/src/stores/{siteLegal.ts => siteSecurity.ts} (75%)
create mode 100644 ui/src/utils/requestAi.ts