This is an automated email from the ASF dual-hosted git repository. linkinstar pushed a commit to branch meta in repository https://gitbox.apache.org/repos/asf/answer.git
commit eba56dbf92bd97dce7ad232ac58dc0184b84bf3f Merge: bcbae259 7dfb8b32 Author: LinkinStars <[email protected]> AuthorDate: Wed Jan 28 16:46:39 2026 +0800 Merge remote-tracking branch 'origin/main' into meta # Conflicts: # i18n/pl_PL.yaml .env.example | 36 + .github/workflows/lint.yml | 62 + .gitignore | 3 + Makefile | 3 +- README.md | 2 +- cmd/main.go | 6 + cmd/wire_gen.go | 71 +- docs/docs.go | 2528 +++++++++++++++----- docs/release/licenses/LICENSE-joho-godotenv.txt | 22 + docs/swagger.json | 2528 +++++++++++++++----- docs/swagger.yaml | 1181 +++++++-- go.mod | 11 +- 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 +- .../middleware/{visit_img_auth.go => mcp_auth.go} | 45 +- 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/ai_conversation.go | 25 +- internal/entity/ai_conversation_record.go | 40 + internal/entity/api_key_entity.go | 42 + internal/entity/user_entity.go | 2 +- internal/install/install_main.go | 8 +- internal/migrations/init.go | 87 +- internal/migrations/migrations.go | 3 + .../Admin/index.scss => internal/migrations/v29.go | 27 +- 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/provider.go | 4 + internal/repo/site_info/siteinfo_repo.go | 10 +- .../user_external_login_repo.go | 2 +- internal/router/answer_api_router.go | 186 +- .../schema/ai_config_schema.go | 35 +- 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 - .../service/activityqueue/activity_queue.go | 21 +- .../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/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 - .../service/eventqueue/event_queue.go | 21 +- .../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 - .../service/noticequeue/notice_queue.go | 25 +- .../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 +- 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 +- 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 ++ .../index.tsx => components/BubbleUser/index.scss} | 13 +- .../{pages/403 => components/BubbleUser}/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 +- .../{pages/Admin => components/Sender}/index.scss | 30 +- ui/src/components/Sender/index.tsx | 172 ++ ui/src/components/SideNav/index.tsx | 14 +- .../ToolBars/indent.tsx => TabNav/index.tsx} | 46 +- 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 +- .../Admin/Apikeys/components/Action/index.tsx | 77 + .../Apikeys/components/AddOrEditModal/index.tsx | 184 ++ .../Apikeys/components/CreatedModal/index.tsx | 55 + .../Admin/Apikeys/components/index.ts} | 8 +- 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 + .../SideNavLayoutWithoutFooter/index.tsx} | 46 +- 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/admin/ai.ts | 87 + ui/src/services/admin/{question.ts => apikeys.ts} | 27 +- ui/src/services/admin/index.ts | 4 + .../{pages/403/index.tsx => services/admin/mcp.ts} | 17 +- ui/src/services/admin/question.ts | 10 + ui/src/services/admin/settings.ts | 38 +- .../403/index.tsx => services/admin/tags.ts} | 11 +- 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 +++ 249 files changed, 19607 insertions(+), 5054 deletions(-)
