This is an automated email from the ASF dual-hosted git repository.

liuhongyu pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/hertzbeat.git


The following commit(s) were added to refs/heads/master by this push:
     new 56226c1d5 refactor: split manager to startup module (#3830)
56226c1d5 is described below

commit 56226c1d528e96c69fcd508fbdc57c0359f7732c
Author: Tomsun28 <[email protected]>
AuthorDate: Wed Oct 29 13:49:04 2025 +0800

    refactor: split manager to startup module (#3830)
    
    Signed-off-by: tomsun28 <[email protected]>
---
 {hertzbeat-ai-agent => hertzbeat-ai}/pom.xml       |   2 +-
 .../ai}/adapters/AlertDefineServiceAdapter.java    |   6 +-
 .../ai}/adapters/AlertServiceAdapter.java          |   4 +-
 .../ai}/adapters/MetricsServiceAdapter.java        |   4 +-
 .../ai}/adapters/MonitorServiceAdapter.java        |   2 +-
 .../impl/AlertDefineServiceAdapterImpl.java        |  12 +-
 .../ai}/adapters/impl/AlertServiceAdapterImpl.java |   8 +-
 .../adapters/impl/MetricsServiceAdapterImpl.java   |   8 +-
 .../adapters/impl/MonitorServiceAdapterImpl.java   |   8 +-
 .../ai}/config/CustomSseServerTransport.java       |   2 +-
 .../hertzbeat/ai}/config/DynamicOpenAiApiKey.java  |   4 +-
 .../org/apache/hertzbeat/ai}/config/LlmConfig.java |   4 +-
 .../hertzbeat/ai}/config/McpContextHolder.java     |   2 +-
 .../hertzbeat/ai}/config/PromptProvider.java       |   4 +-
 .../hertzbeat/ai}/controller/ChatController.java   |  14 +-
 .../apache/hertzbeat/ai}/entity/OpenAiConfig.java  |   4 +-
 .../hertzbeat/ai}/pojo/dto/ChatRequestContext.java |   4 +-
 .../hertzbeat/ai}/pojo/dto/ChatResponseDto.java    |   4 +-
 .../hertzbeat/ai}/pojo/dto/ConversationDto.java    |   4 +-
 .../apache/hertzbeat/ai}/pojo/dto/Hierarchy.java   |   2 +-
 .../apache/hertzbeat/ai}/pojo/dto/MessageDto.java  |   4 +-
 .../ai}/pojo/dto/ModelProviderConfig.java          |   2 +-
 .../hertzbeat/ai}/service/AiConfigService.java     |   2 +-
 .../ai}/service/ChatClientProviderService.java     |   4 +-
 .../hertzbeat/ai}/service/ConversationService.java |   8 +-
 .../hertzbeat/ai}/service/McpServerService.java    |   4 +-
 .../ai}/service/impl/AiConfigServiceImpl.java      |   4 +-
 .../impl/ChatClientProviderServiceImpl.java        |  12 +-
 .../ai}/service/impl/ConversationServiceImpl.java  |  14 +-
 .../ai}/service/impl/McpServerServiceImpl.java     |  14 +-
 .../hertzbeat/ai}/tools/AlertDefineTools.java      |   4 +-
 .../org/apache/hertzbeat/ai}/tools/AlertTools.java |   2 +-
 .../apache/hertzbeat/ai}/tools/MetricsTools.java   |   2 +-
 .../apache/hertzbeat/ai}/tools/MonitorTools.java   |   4 +-
 .../ai}/tools/impl/AlertDefineToolsImpl.java       |  14 +-
 .../hertzbeat/ai}/tools/impl/AlertToolsImpl.java   |  10 +-
 .../hertzbeat/ai}/tools/impl/MetricsToolsImpl.java |  12 +-
 .../hertzbeat/ai}/tools/impl/MonitorToolsImpl.java |  10 +-
 .../apache/hertzbeat/ai}/utils/UtilityClass.java   |   4 +-
 .../alert/service/AlertDefineServiceTest.java      |   8 +-
 .../common/constants/ConfigConstants.java          |   2 +
 hertzbeat-e2e/hertzbeat-log-e2e/pom.xml            |  63 +-----
 .../log/alert/LogPeriodicAlertE2eTest.java         |   2 +-
 .../log/alert/LogRealTimeAlertE2eTest.java         |   2 +-
 .../log/ingestion/LogIngestionE2eTest.java         |   2 +-
 .../log/storage/GreptimeLogStorageE2eTest.java     |   2 +-
 .../src/test}/resources/sureness.yml               |   0
 hertzbeat-e2e/pom.xml                              |   2 +-
 hertzbeat-manager/pom.xml                          | 220 +--------------------
 .../manager/config/ManagerAutoConfiguration.java}  |  18 +-
 .../impl/ModelProviderConfigServiceImpl.java       |   2 +-
 ...rk.boot.autoconfigure.AutoConfiguration.imports |  14 +-
 .../service/AlertDefineServiceIntegrationTest.java | 123 ------------
 .../src/{main => test}/resources/sureness.yml      |   0
 hertzbeat-startup/README.md                        | 135 +++++++++++++
 {hertzbeat-manager => hertzbeat-startup}/pom.xml   | 212 +++++++-------------
 .../hertzbeat/startup/HertzBeatApplication.java    |  14 +-
 .../src/main/resources/application-test.yml        |   0
 .../src/main/resources/application.yml             |   0
 .../src/main/resources/banner.txt                  |   0
 .../db/migration/h2/V160__update_column.sql        |   0
 .../db/migration/h2/V170__update_column.sql        |   0
 .../db/migration/h2/V172__update_column.sql        |   0
 .../db/migration/h2/V173__update_column.sql        |   0
 .../db/migration/h2/V180__update_column.sql        |   0
 .../db/migration/mysql/V160__update_column.sql     |   0
 .../db/migration/mysql/V170__update_column.sql     |   0
 .../db/migration/mysql/V172__update_column.sql     |   0
 .../db/migration/mysql/V173__update_column.sql     |   0
 .../db/migration/mysql/V180__update_column.sql     |   0
 .../migration/postgresql/V160__update_column.sql   |   0
 .../migration/postgresql/V170__update_column.sql   |   0
 .../migration/postgresql/V172__update_column.sql   |   0
 .../migration/postgresql/V173__update_column.sql   |   0
 .../migration/postgresql/V180__update_column.sql   |   0
 .../src/main/resources/logback-spring.xml          |   0
 .../src/main/resources/sureness.yml                |   0
 .../startup}/AbstractSpringIntegrationTest.java    |   4 +-
 .../org/apache/hertzbeat/startup/ContextTest.java  |  15 +-
 .../hertzbeat/startup}/dao/CollectorDaoTest.java   |   5 +-
 .../hertzbeat/startup}/dao/LabelDaoTest.java       |   5 +-
 .../startup}/dao/MetricsFavoriteDaoTest.java       |   7 +-
 .../hertzbeat/startup}/dao/MonitorDaoTest.java     |   5 +-
 .../hertzbeat/startup}/dao/NoticeRuleDaoTest.java  |   4 +-
 .../hertzbeat/startup}/dao/ParamDaoTest.java       |   5 +-
 .../hertzbeat/startup}/dao/ParamDefineDaoTest.java |   5 +-
 mcp-servers/README.md                              |   2 +
 .../mcp-log-server}/README.md                      |   0
 .../mcp-log-server}/pom.xml                        |   0
 .../mcp/log}/server/McpServerApplication.java      |   0
 .../mcp/log}/server/service/LogService.java        |   0
 .../src/main/resources/application.yml             |   0
 pom.xml                                            |  10 +-
 script/assembly/server/bin/entrypoint.sh           |   2 +-
 script/assembly/server/bin/startup.bat             |   2 +-
 script/assembly/server/bin/startup.sh              |   2 +-
 96 files changed, 397 insertions(+), 729 deletions(-)

diff --git a/hertzbeat-ai-agent/pom.xml b/hertzbeat-ai/pom.xml
similarity index 98%
rename from hertzbeat-ai-agent/pom.xml
rename to hertzbeat-ai/pom.xml
index 9bb22303a..0fe8dc158 100644
--- a/hertzbeat-ai-agent/pom.xml
+++ b/hertzbeat-ai/pom.xml
@@ -23,7 +23,7 @@
                <artifactId>hertzbeat</artifactId>
                <version>2.0-SNAPSHOT</version>
        </parent>
-       <artifactId>hertzbeat-ai-agent</artifactId>
+       <artifactId>hertzbeat-ai</artifactId>
        <version>${hertzbeat.version}</version>
        <properties>
                <spring-ai.version>1.0.3</spring-ai.version>
diff --git 
a/hertzbeat-ai-agent/src/main/java/org/apache/hertzbeat/ai/agent/adapters/AlertDefineServiceAdapter.java
 
b/hertzbeat-ai/src/main/java/org/apache/hertzbeat/ai/adapters/AlertDefineServiceAdapter.java
similarity index 96%
rename from 
hertzbeat-ai-agent/src/main/java/org/apache/hertzbeat/ai/agent/adapters/AlertDefineServiceAdapter.java
rename to 
hertzbeat-ai/src/main/java/org/apache/hertzbeat/ai/adapters/AlertDefineServiceAdapter.java
index d11adc343..63ac256b6 100644
--- 
a/hertzbeat-ai-agent/src/main/java/org/apache/hertzbeat/ai/agent/adapters/AlertDefineServiceAdapter.java
+++ 
b/hertzbeat-ai/src/main/java/org/apache/hertzbeat/ai/adapters/AlertDefineServiceAdapter.java
@@ -15,9 +15,9 @@
  * limitations under the License.
  */
 
-package org.apache.hertzbeat.ai.agent.adapters;
+package org.apache.hertzbeat.ai.adapters;
 
-import org.apache.hertzbeat.ai.agent.pojo.dto.Hierarchy;
+import org.apache.hertzbeat.ai.pojo.dto.Hierarchy;
 import org.apache.hertzbeat.common.entity.alerter.AlertDefine;
 import org.springframework.data.domain.Page;
 
@@ -78,4 +78,4 @@ public interface AlertDefineServiceAdapter {
      */
 
     List<Hierarchy> getAppHierarchy(String app, String lang);
-}
\ No newline at end of file
+}
diff --git 
a/hertzbeat-ai-agent/src/main/java/org/apache/hertzbeat/ai/agent/adapters/AlertServiceAdapter.java
 
b/hertzbeat-ai/src/main/java/org/apache/hertzbeat/ai/adapters/AlertServiceAdapter.java
similarity index 97%
rename from 
hertzbeat-ai-agent/src/main/java/org/apache/hertzbeat/ai/agent/adapters/AlertServiceAdapter.java
rename to 
hertzbeat-ai/src/main/java/org/apache/hertzbeat/ai/adapters/AlertServiceAdapter.java
index 534463b31..b4dbb196c 100644
--- 
a/hertzbeat-ai-agent/src/main/java/org/apache/hertzbeat/ai/agent/adapters/AlertServiceAdapter.java
+++ 
b/hertzbeat-ai/src/main/java/org/apache/hertzbeat/ai/adapters/AlertServiceAdapter.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.hertzbeat.ai.agent.adapters;
+package org.apache.hertzbeat.ai.adapters;
 
 import org.apache.hertzbeat.alert.dto.AlertSummary;
 import org.apache.hertzbeat.common.entity.alerter.GroupAlert;
@@ -57,4 +57,4 @@ public interface AlertServiceAdapter {
      * @return Alert summary information
      */
     AlertSummary getAlertsSummary();
-}
\ No newline at end of file
+}
diff --git 
a/hertzbeat-ai-agent/src/main/java/org/apache/hertzbeat/ai/agent/adapters/MetricsServiceAdapter.java
 
b/hertzbeat-ai/src/main/java/org/apache/hertzbeat/ai/adapters/MetricsServiceAdapter.java
similarity index 97%
rename from 
hertzbeat-ai-agent/src/main/java/org/apache/hertzbeat/ai/agent/adapters/MetricsServiceAdapter.java
rename to 
hertzbeat-ai/src/main/java/org/apache/hertzbeat/ai/adapters/MetricsServiceAdapter.java
index 9df04de39..f40959673 100644
--- 
a/hertzbeat-ai-agent/src/main/java/org/apache/hertzbeat/ai/agent/adapters/MetricsServiceAdapter.java
+++ 
b/hertzbeat-ai/src/main/java/org/apache/hertzbeat/ai/adapters/MetricsServiceAdapter.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.hertzbeat.ai.agent.adapters;
+package org.apache.hertzbeat.ai.adapters;
 
 import org.apache.hertzbeat.common.entity.dto.MetricsData;
 import org.apache.hertzbeat.common.entity.dto.MetricsHistoryData;
@@ -52,4 +52,4 @@ public interface MetricsServiceAdapter {
      * @return Historical metrics data
      */
     MetricsHistoryData getMetricHistoryData(Long monitorId, String app, String 
metrics, String metric, String label, String history, Boolean interval);
-}
\ No newline at end of file
+}
diff --git 
a/hertzbeat-ai-agent/src/main/java/org/apache/hertzbeat/ai/agent/adapters/MonitorServiceAdapter.java
 
b/hertzbeat-ai/src/main/java/org/apache/hertzbeat/ai/adapters/MonitorServiceAdapter.java
similarity index 98%
rename from 
hertzbeat-ai-agent/src/main/java/org/apache/hertzbeat/ai/agent/adapters/MonitorServiceAdapter.java
rename to 
hertzbeat-ai/src/main/java/org/apache/hertzbeat/ai/adapters/MonitorServiceAdapter.java
index b8f1fb172..aad0e2a72 100644
--- 
a/hertzbeat-ai-agent/src/main/java/org/apache/hertzbeat/ai/agent/adapters/MonitorServiceAdapter.java
+++ 
b/hertzbeat-ai/src/main/java/org/apache/hertzbeat/ai/adapters/MonitorServiceAdapter.java
@@ -16,7 +16,7 @@
  */
 
 
-package org.apache.hertzbeat.ai.agent.adapters;
+package org.apache.hertzbeat.ai.adapters;
 
 import org.springframework.data.domain.Page;
 import org.apache.hertzbeat.common.entity.manager.Monitor;
diff --git 
a/hertzbeat-ai-agent/src/main/java/org/apache/hertzbeat/ai/agent/adapters/impl/AlertDefineServiceAdapterImpl.java
 
b/hertzbeat-ai/src/main/java/org/apache/hertzbeat/ai/adapters/impl/AlertDefineServiceAdapterImpl.java
similarity index 97%
rename from 
hertzbeat-ai-agent/src/main/java/org/apache/hertzbeat/ai/agent/adapters/impl/AlertDefineServiceAdapterImpl.java
rename to 
hertzbeat-ai/src/main/java/org/apache/hertzbeat/ai/adapters/impl/AlertDefineServiceAdapterImpl.java
index 68840e502..a22093c62 100644
--- 
a/hertzbeat-ai-agent/src/main/java/org/apache/hertzbeat/ai/agent/adapters/impl/AlertDefineServiceAdapterImpl.java
+++ 
b/hertzbeat-ai/src/main/java/org/apache/hertzbeat/ai/adapters/impl/AlertDefineServiceAdapterImpl.java
@@ -15,14 +15,14 @@
  * limitations under the License.
  */
 
-package org.apache.hertzbeat.ai.agent.adapters.impl;
+package org.apache.hertzbeat.ai.adapters.impl;
 
 import com.usthe.sureness.subject.SubjectSum;
 import lombok.extern.slf4j.Slf4j;
-import org.apache.hertzbeat.ai.agent.adapters.AlertDefineServiceAdapter;
-import org.apache.hertzbeat.ai.agent.config.McpContextHolder;
-import org.apache.hertzbeat.ai.agent.pojo.dto.Hierarchy;
-import org.apache.hertzbeat.ai.agent.utils.UtilityClass;
+import org.apache.hertzbeat.ai.adapters.AlertDefineServiceAdapter;
+import org.apache.hertzbeat.ai.config.McpContextHolder;
+import org.apache.hertzbeat.ai.pojo.dto.Hierarchy;
+import org.apache.hertzbeat.ai.utils.UtilityClass;
 import org.apache.hertzbeat.common.entity.alerter.AlertDefine;
 import org.apache.hertzbeat.common.support.SpringContextHolder;
 import org.springframework.data.domain.Page;
@@ -254,4 +254,4 @@ public class AlertDefineServiceAdapterImpl implements 
AlertDefineServiceAdapter
         }
     }
 
-}
\ No newline at end of file
+}
diff --git 
a/hertzbeat-ai-agent/src/main/java/org/apache/hertzbeat/ai/agent/adapters/impl/AlertServiceAdapterImpl.java
 
b/hertzbeat-ai/src/main/java/org/apache/hertzbeat/ai/adapters/impl/AlertServiceAdapterImpl.java
similarity index 97%
rename from 
hertzbeat-ai-agent/src/main/java/org/apache/hertzbeat/ai/agent/adapters/impl/AlertServiceAdapterImpl.java
rename to 
hertzbeat-ai/src/main/java/org/apache/hertzbeat/ai/adapters/impl/AlertServiceAdapterImpl.java
index 101cf70ac..8caf902f5 100644
--- 
a/hertzbeat-ai-agent/src/main/java/org/apache/hertzbeat/ai/agent/adapters/impl/AlertServiceAdapterImpl.java
+++ 
b/hertzbeat-ai/src/main/java/org/apache/hertzbeat/ai/adapters/impl/AlertServiceAdapterImpl.java
@@ -15,12 +15,12 @@
  * limitations under the License.
  */
 
-package org.apache.hertzbeat.ai.agent.adapters.impl;
+package org.apache.hertzbeat.ai.adapters.impl;
 
 import com.usthe.sureness.subject.SubjectSum;
 import lombok.extern.slf4j.Slf4j;
-import org.apache.hertzbeat.ai.agent.adapters.AlertServiceAdapter;
-import org.apache.hertzbeat.ai.agent.config.McpContextHolder;
+import org.apache.hertzbeat.ai.adapters.AlertServiceAdapter;
+import org.apache.hertzbeat.ai.config.McpContextHolder;
 import org.apache.hertzbeat.alert.dto.AlertSummary;
 import org.apache.hertzbeat.common.entity.alerter.GroupAlert;
 import org.apache.hertzbeat.common.entity.alerter.SingleAlert;
@@ -138,4 +138,4 @@ public class AlertServiceAdapterImpl implements 
AlertServiceAdapter {
             throw new RuntimeException("Failed to invoke getAlertsSummary via 
adapter: " + e.getMessage(), e);
         }
     }
-}
\ No newline at end of file
+}
diff --git 
a/hertzbeat-ai-agent/src/main/java/org/apache/hertzbeat/ai/agent/adapters/impl/MetricsServiceAdapterImpl.java
 
b/hertzbeat-ai/src/main/java/org/apache/hertzbeat/ai/adapters/impl/MetricsServiceAdapterImpl.java
similarity index 97%
rename from 
hertzbeat-ai-agent/src/main/java/org/apache/hertzbeat/ai/agent/adapters/impl/MetricsServiceAdapterImpl.java
rename to 
hertzbeat-ai/src/main/java/org/apache/hertzbeat/ai/adapters/impl/MetricsServiceAdapterImpl.java
index c64286ab5..d225ba87f 100644
--- 
a/hertzbeat-ai-agent/src/main/java/org/apache/hertzbeat/ai/agent/adapters/impl/MetricsServiceAdapterImpl.java
+++ 
b/hertzbeat-ai/src/main/java/org/apache/hertzbeat/ai/adapters/impl/MetricsServiceAdapterImpl.java
@@ -15,12 +15,12 @@
  * limitations under the License.
  */
 
-package org.apache.hertzbeat.ai.agent.adapters.impl;
+package org.apache.hertzbeat.ai.adapters.impl;
 
 import com.usthe.sureness.subject.SubjectSum;
 import lombok.extern.slf4j.Slf4j;
-import org.apache.hertzbeat.ai.agent.adapters.MetricsServiceAdapter;
-import org.apache.hertzbeat.ai.agent.config.McpContextHolder;
+import org.apache.hertzbeat.ai.adapters.MetricsServiceAdapter;
+import org.apache.hertzbeat.ai.config.McpContextHolder;
 import org.apache.hertzbeat.common.entity.dto.MetricsData;
 import org.apache.hertzbeat.common.entity.dto.MetricsHistoryData;
 import org.apache.hertzbeat.common.support.SpringContextHolder;
@@ -133,4 +133,4 @@ public class MetricsServiceAdapterImpl implements 
MetricsServiceAdapter {
             throw new RuntimeException("Failed to invoke getMetricHistoryData 
via adapter: " + e.getMessage(), e);
         }
     }
-}
\ No newline at end of file
+}
diff --git 
a/hertzbeat-ai-agent/src/main/java/org/apache/hertzbeat/ai/agent/adapters/impl/MonitorServiceAdapterImpl.java
 
b/hertzbeat-ai/src/main/java/org/apache/hertzbeat/ai/adapters/impl/MonitorServiceAdapterImpl.java
similarity index 97%
rename from 
hertzbeat-ai-agent/src/main/java/org/apache/hertzbeat/ai/agent/adapters/impl/MonitorServiceAdapterImpl.java
rename to 
hertzbeat-ai/src/main/java/org/apache/hertzbeat/ai/adapters/impl/MonitorServiceAdapterImpl.java
index 28f6b0756..8a4f381fc 100644
--- 
a/hertzbeat-ai-agent/src/main/java/org/apache/hertzbeat/ai/agent/adapters/impl/MonitorServiceAdapterImpl.java
+++ 
b/hertzbeat-ai/src/main/java/org/apache/hertzbeat/ai/adapters/impl/MonitorServiceAdapterImpl.java
@@ -16,12 +16,12 @@
  */
 
 
-package org.apache.hertzbeat.ai.agent.adapters.impl;
+package org.apache.hertzbeat.ai.adapters.impl;
 
 import com.usthe.sureness.subject.SubjectSum;
 import lombok.extern.slf4j.Slf4j;
-import org.apache.hertzbeat.ai.agent.adapters.MonitorServiceAdapter;
-import org.apache.hertzbeat.ai.agent.config.McpContextHolder;
+import org.apache.hertzbeat.ai.adapters.MonitorServiceAdapter;
+import org.apache.hertzbeat.ai.config.McpContextHolder;
 import org.springframework.data.domain.Page;
 import org.apache.hertzbeat.common.entity.manager.Monitor;
 import org.apache.hertzbeat.common.entity.manager.Param;
@@ -211,4 +211,4 @@ public class MonitorServiceAdapterImpl implements 
MonitorServiceAdapter {
             throw new RuntimeException("Failed to invoke getAppParamDefines 
via adapter: " + e.getMessage(), e);
         }
     }
-}
\ No newline at end of file
+}
diff --git 
a/hertzbeat-ai-agent/src/main/java/org/apache/hertzbeat/ai/agent/config/CustomSseServerTransport.java
 
b/hertzbeat-ai/src/main/java/org/apache/hertzbeat/ai/config/CustomSseServerTransport.java
similarity index 99%
rename from 
hertzbeat-ai-agent/src/main/java/org/apache/hertzbeat/ai/agent/config/CustomSseServerTransport.java
rename to 
hertzbeat-ai/src/main/java/org/apache/hertzbeat/ai/config/CustomSseServerTransport.java
index 7eacfb90b..825985e86 100644
--- 
a/hertzbeat-ai-agent/src/main/java/org/apache/hertzbeat/ai/agent/config/CustomSseServerTransport.java
+++ 
b/hertzbeat-ai/src/main/java/org/apache/hertzbeat/ai/config/CustomSseServerTransport.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.hertzbeat.ai.agent.config;
+package org.apache.hertzbeat.ai.config;
 
 
 import com.fasterxml.jackson.core.type.TypeReference;
diff --git 
a/hertzbeat-ai-agent/src/main/java/org/apache/hertzbeat/ai/agent/config/DynamicOpenAiApiKey.java
 
b/hertzbeat-ai/src/main/java/org/apache/hertzbeat/ai/config/DynamicOpenAiApiKey.java
similarity index 95%
rename from 
hertzbeat-ai-agent/src/main/java/org/apache/hertzbeat/ai/agent/config/DynamicOpenAiApiKey.java
rename to 
hertzbeat-ai/src/main/java/org/apache/hertzbeat/ai/config/DynamicOpenAiApiKey.java
index bad25be51..3750db9dd 100644
--- 
a/hertzbeat-ai-agent/src/main/java/org/apache/hertzbeat/ai/agent/config/DynamicOpenAiApiKey.java
+++ 
b/hertzbeat-ai/src/main/java/org/apache/hertzbeat/ai/config/DynamicOpenAiApiKey.java
@@ -15,10 +15,10 @@
  * limitations under the License.
  */
 
-package org.apache.hertzbeat.ai.agent.config;
+package org.apache.hertzbeat.ai.config;
 
 import lombok.extern.slf4j.Slf4j;
-import org.apache.hertzbeat.ai.agent.pojo.dto.ModelProviderConfig;
+import org.apache.hertzbeat.ai.pojo.dto.ModelProviderConfig;
 import org.apache.hertzbeat.base.dao.GeneralConfigDao;
 import org.apache.hertzbeat.common.entity.manager.GeneralConfig;
 import org.apache.hertzbeat.common.util.JsonUtil;
diff --git 
a/hertzbeat-ai-agent/src/main/java/org/apache/hertzbeat/ai/agent/config/LlmConfig.java
 b/hertzbeat-ai/src/main/java/org/apache/hertzbeat/ai/config/LlmConfig.java
similarity index 98%
rename from 
hertzbeat-ai-agent/src/main/java/org/apache/hertzbeat/ai/agent/config/LlmConfig.java
rename to 
hertzbeat-ai/src/main/java/org/apache/hertzbeat/ai/config/LlmConfig.java
index 7f8c65733..60a6db740 100644
--- 
a/hertzbeat-ai-agent/src/main/java/org/apache/hertzbeat/ai/agent/config/LlmConfig.java
+++ b/hertzbeat-ai/src/main/java/org/apache/hertzbeat/ai/config/LlmConfig.java
@@ -16,11 +16,11 @@
  */
 
 
-package org.apache.hertzbeat.ai.agent.config;
+package org.apache.hertzbeat.ai.config;
 
 import lombok.extern.slf4j.Slf4j;
 import org.apache.hertzbeat.common.support.event.AiProviderConfigChangeEvent;
-import org.apache.hertzbeat.ai.agent.pojo.dto.ModelProviderConfig;
+import org.apache.hertzbeat.ai.pojo.dto.ModelProviderConfig;
 import org.apache.hertzbeat.base.dao.GeneralConfigDao;
 import org.apache.hertzbeat.common.entity.manager.GeneralConfig;
 import org.apache.hertzbeat.common.util.JsonUtil;
diff --git 
a/hertzbeat-ai-agent/src/main/java/org/apache/hertzbeat/ai/agent/config/McpContextHolder.java
 
b/hertzbeat-ai/src/main/java/org/apache/hertzbeat/ai/config/McpContextHolder.java
similarity index 97%
rename from 
hertzbeat-ai-agent/src/main/java/org/apache/hertzbeat/ai/agent/config/McpContextHolder.java
rename to 
hertzbeat-ai/src/main/java/org/apache/hertzbeat/ai/config/McpContextHolder.java
index 2fd201c8a..3c07f9c14 100644
--- 
a/hertzbeat-ai-agent/src/main/java/org/apache/hertzbeat/ai/agent/config/McpContextHolder.java
+++ 
b/hertzbeat-ai/src/main/java/org/apache/hertzbeat/ai/config/McpContextHolder.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.hertzbeat.ai.agent.config;
+package org.apache.hertzbeat.ai.config;
 
 import com.usthe.sureness.subject.SubjectSum;
 import org.springframework.core.NamedInheritableThreadLocal;
diff --git 
a/hertzbeat-ai-agent/src/main/java/org/apache/hertzbeat/ai/agent/config/PromptProvider.java
 b/hertzbeat-ai/src/main/java/org/apache/hertzbeat/ai/config/PromptProvider.java
similarity index 99%
rename from 
hertzbeat-ai-agent/src/main/java/org/apache/hertzbeat/ai/agent/config/PromptProvider.java
rename to 
hertzbeat-ai/src/main/java/org/apache/hertzbeat/ai/config/PromptProvider.java
index 8dbd1d6fe..1cdf69f0f 100644
--- 
a/hertzbeat-ai-agent/src/main/java/org/apache/hertzbeat/ai/agent/config/PromptProvider.java
+++ 
b/hertzbeat-ai/src/main/java/org/apache/hertzbeat/ai/config/PromptProvider.java
@@ -16,7 +16,7 @@
  */
 
 
-package org.apache.hertzbeat.ai.agent.config;
+package org.apache.hertzbeat.ai.config;
 
 import org.springframework.stereotype.Component;
 
@@ -179,4 +179,4 @@ public class PromptProvider {
             Keep responses focused on monitoring topics and HertzBeat's 
comprehensive capabilities.
             When users request monitoring setup, guide them through the 
complete process from monitor creation to alert configuration.
             """;
-}
\ No newline at end of file
+}
diff --git 
a/hertzbeat-ai-agent/src/main/java/org/apache/hertzbeat/ai/agent/controller/ChatController.java
 
b/hertzbeat-ai/src/main/java/org/apache/hertzbeat/ai/controller/ChatController.java
similarity index 95%
rename from 
hertzbeat-ai-agent/src/main/java/org/apache/hertzbeat/ai/agent/controller/ChatController.java
rename to 
hertzbeat-ai/src/main/java/org/apache/hertzbeat/ai/controller/ChatController.java
index 58ef87460..dea6ffe6b 100644
--- 
a/hertzbeat-ai-agent/src/main/java/org/apache/hertzbeat/ai/agent/controller/ChatController.java
+++ 
b/hertzbeat-ai/src/main/java/org/apache/hertzbeat/ai/controller/ChatController.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.hertzbeat.ai.agent.controller;
+package org.apache.hertzbeat.ai.controller;
 
 import com.usthe.sureness.subject.SubjectSum;
 import com.usthe.sureness.util.SurenessContextHolder;
@@ -23,11 +23,11 @@ import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.Parameter;
 import io.swagger.v3.oas.annotations.tags.Tag;
 import lombok.extern.slf4j.Slf4j;
-import org.apache.hertzbeat.ai.agent.config.McpContextHolder;
-import org.apache.hertzbeat.ai.agent.pojo.dto.ChatRequestContext;
-import org.apache.hertzbeat.ai.agent.pojo.dto.ChatResponseDto;
-import org.apache.hertzbeat.ai.agent.pojo.dto.ConversationDto;
-import org.apache.hertzbeat.ai.agent.service.ConversationService;
+import org.apache.hertzbeat.ai.config.McpContextHolder;
+import org.apache.hertzbeat.ai.pojo.dto.ChatRequestContext;
+import org.apache.hertzbeat.ai.pojo.dto.ChatResponseDto;
+import org.apache.hertzbeat.ai.pojo.dto.ConversationDto;
+import org.apache.hertzbeat.ai.service.ConversationService;
 import org.apache.hertzbeat.common.entity.dto.Message;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.ResponseEntity;
@@ -194,4 +194,4 @@ public class ChatController {
         }
 
     }
-}
\ No newline at end of file
+}
diff --git 
a/hertzbeat-ai-agent/src/main/java/org/apache/hertzbeat/ai/agent/entity/OpenAiConfig.java
 b/hertzbeat-ai/src/main/java/org/apache/hertzbeat/ai/entity/OpenAiConfig.java
similarity index 98%
rename from 
hertzbeat-ai-agent/src/main/java/org/apache/hertzbeat/ai/agent/entity/OpenAiConfig.java
rename to 
hertzbeat-ai/src/main/java/org/apache/hertzbeat/ai/entity/OpenAiConfig.java
index 933cb63f9..7795acea7 100644
--- 
a/hertzbeat-ai-agent/src/main/java/org/apache/hertzbeat/ai/agent/entity/OpenAiConfig.java
+++ 
b/hertzbeat-ai/src/main/java/org/apache/hertzbeat/ai/entity/OpenAiConfig.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.hertzbeat.ai.agent.entity;
+package org.apache.hertzbeat.ai.entity;
 
 import static io.swagger.v3.oas.annotations.media.Schema.AccessMode.READ_ONLY;
 import static io.swagger.v3.oas.annotations.media.Schema.AccessMode.READ_WRITE;
@@ -77,4 +77,4 @@ public class OpenAiConfig {
     @Schema(title = "Record the latest modification time (timestamp in 
milliseconds)", accessMode = READ_ONLY)
     @LastModifiedDate
     private LocalDateTime gmtUpdate;
-}
\ No newline at end of file
+}
diff --git 
a/hertzbeat-ai-agent/src/main/java/org/apache/hertzbeat/ai/agent/pojo/dto/ChatRequestContext.java
 
b/hertzbeat-ai/src/main/java/org/apache/hertzbeat/ai/pojo/dto/ChatRequestContext.java
similarity index 96%
rename from 
hertzbeat-ai-agent/src/main/java/org/apache/hertzbeat/ai/agent/pojo/dto/ChatRequestContext.java
rename to 
hertzbeat-ai/src/main/java/org/apache/hertzbeat/ai/pojo/dto/ChatRequestContext.java
index 6d6b9e046..0ca317d9b 100644
--- 
a/hertzbeat-ai-agent/src/main/java/org/apache/hertzbeat/ai/agent/pojo/dto/ChatRequestContext.java
+++ 
b/hertzbeat-ai/src/main/java/org/apache/hertzbeat/ai/pojo/dto/ChatRequestContext.java
@@ -16,7 +16,7 @@
  */
 
 
-package org.apache.hertzbeat.ai.agent.pojo.dto;
+package org.apache.hertzbeat.ai.pojo.dto;
 
 import lombok.AllArgsConstructor;
 import lombok.Builder;
@@ -46,4 +46,4 @@ public class ChatRequestContext {
      * Conversation history messages for context
      */
     private List<MessageDto> conversationHistory;
-}
\ No newline at end of file
+}
diff --git 
a/hertzbeat-ai-agent/src/main/java/org/apache/hertzbeat/ai/agent/pojo/dto/ChatResponseDto.java
 
b/hertzbeat-ai/src/main/java/org/apache/hertzbeat/ai/pojo/dto/ChatResponseDto.java
similarity index 97%
rename from 
hertzbeat-ai-agent/src/main/java/org/apache/hertzbeat/ai/agent/pojo/dto/ChatResponseDto.java
rename to 
hertzbeat-ai/src/main/java/org/apache/hertzbeat/ai/pojo/dto/ChatResponseDto.java
index 210d39b6b..1e154d253 100644
--- 
a/hertzbeat-ai-agent/src/main/java/org/apache/hertzbeat/ai/agent/pojo/dto/ChatResponseDto.java
+++ 
b/hertzbeat-ai/src/main/java/org/apache/hertzbeat/ai/pojo/dto/ChatResponseDto.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.hertzbeat.ai.agent.pojo.dto;
+package org.apache.hertzbeat.ai.pojo.dto;
 
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.AllArgsConstructor;
@@ -44,4 +44,4 @@ public class ChatResponseDto {
 
     @Schema(description = "Assistant message ID", example = 
"msg-assistant-123")
     private String assistantMessageId;
-}
\ No newline at end of file
+}
diff --git 
a/hertzbeat-ai-agent/src/main/java/org/apache/hertzbeat/ai/agent/pojo/dto/ConversationDto.java
 
b/hertzbeat-ai/src/main/java/org/apache/hertzbeat/ai/pojo/dto/ConversationDto.java
similarity index 97%
rename from 
hertzbeat-ai-agent/src/main/java/org/apache/hertzbeat/ai/agent/pojo/dto/ConversationDto.java
rename to 
hertzbeat-ai/src/main/java/org/apache/hertzbeat/ai/pojo/dto/ConversationDto.java
index 33fe49aaa..9b54af525 100644
--- 
a/hertzbeat-ai-agent/src/main/java/org/apache/hertzbeat/ai/agent/pojo/dto/ConversationDto.java
+++ 
b/hertzbeat-ai/src/main/java/org/apache/hertzbeat/ai/pojo/dto/ConversationDto.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.hertzbeat.ai.agent.pojo.dto;
+package org.apache.hertzbeat.ai.pojo.dto;
 
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.AllArgsConstructor;
@@ -50,4 +50,4 @@ public class ConversationDto {
 
     @Schema(description = "Message count")
     private Integer messageCount;
-}
\ No newline at end of file
+}
diff --git 
a/hertzbeat-ai-agent/src/main/java/org/apache/hertzbeat/ai/agent/pojo/dto/Hierarchy.java
 b/hertzbeat-ai/src/main/java/org/apache/hertzbeat/ai/pojo/dto/Hierarchy.java
similarity index 98%
rename from 
hertzbeat-ai-agent/src/main/java/org/apache/hertzbeat/ai/agent/pojo/dto/Hierarchy.java
rename to 
hertzbeat-ai/src/main/java/org/apache/hertzbeat/ai/pojo/dto/Hierarchy.java
index ee62bbf2f..2d750fe52 100644
--- 
a/hertzbeat-ai-agent/src/main/java/org/apache/hertzbeat/ai/agent/pojo/dto/Hierarchy.java
+++ b/hertzbeat-ai/src/main/java/org/apache/hertzbeat/ai/pojo/dto/Hierarchy.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.hertzbeat.ai.agent.pojo.dto;
+package org.apache.hertzbeat.ai.pojo.dto;
 
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.AllArgsConstructor;
diff --git 
a/hertzbeat-ai-agent/src/main/java/org/apache/hertzbeat/ai/agent/pojo/dto/MessageDto.java
 b/hertzbeat-ai/src/main/java/org/apache/hertzbeat/ai/pojo/dto/MessageDto.java
similarity index 97%
rename from 
hertzbeat-ai-agent/src/main/java/org/apache/hertzbeat/ai/agent/pojo/dto/MessageDto.java
rename to 
hertzbeat-ai/src/main/java/org/apache/hertzbeat/ai/pojo/dto/MessageDto.java
index cb6c0fca5..857b31aef 100644
--- 
a/hertzbeat-ai-agent/src/main/java/org/apache/hertzbeat/ai/agent/pojo/dto/MessageDto.java
+++ 
b/hertzbeat-ai/src/main/java/org/apache/hertzbeat/ai/pojo/dto/MessageDto.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.hertzbeat.ai.agent.pojo.dto;
+package org.apache.hertzbeat.ai.pojo.dto;
 
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.AllArgsConstructor;
@@ -49,4 +49,4 @@ public class MessageDto {
 
     @Schema(description = "Message timestamp")
     private LocalDateTime timestamp;
-}
\ No newline at end of file
+}
diff --git 
a/hertzbeat-ai-agent/src/main/java/org/apache/hertzbeat/ai/agent/pojo/dto/ModelProviderConfig.java
 
b/hertzbeat-ai/src/main/java/org/apache/hertzbeat/ai/pojo/dto/ModelProviderConfig.java
similarity index 97%
rename from 
hertzbeat-ai-agent/src/main/java/org/apache/hertzbeat/ai/agent/pojo/dto/ModelProviderConfig.java
rename to 
hertzbeat-ai/src/main/java/org/apache/hertzbeat/ai/pojo/dto/ModelProviderConfig.java
index af96cfd03..e463dfda2 100644
--- 
a/hertzbeat-ai-agent/src/main/java/org/apache/hertzbeat/ai/agent/pojo/dto/ModelProviderConfig.java
+++ 
b/hertzbeat-ai/src/main/java/org/apache/hertzbeat/ai/pojo/dto/ModelProviderConfig.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.hertzbeat.ai.agent.pojo.dto;
+package org.apache.hertzbeat.ai.pojo.dto;
 
 import io.swagger.v3.oas.annotations.media.Schema;
 import jakarta.validation.constraints.NotBlank;
diff --git 
a/hertzbeat-ai-agent/src/main/java/org/apache/hertzbeat/ai/agent/service/AiConfigService.java
 
b/hertzbeat-ai/src/main/java/org/apache/hertzbeat/ai/service/AiConfigService.java
similarity index 97%
rename from 
hertzbeat-ai-agent/src/main/java/org/apache/hertzbeat/ai/agent/service/AiConfigService.java
rename to 
hertzbeat-ai/src/main/java/org/apache/hertzbeat/ai/service/AiConfigService.java
index 796c46986..03134f7a8 100644
--- 
a/hertzbeat-ai-agent/src/main/java/org/apache/hertzbeat/ai/agent/service/AiConfigService.java
+++ 
b/hertzbeat-ai/src/main/java/org/apache/hertzbeat/ai/service/AiConfigService.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.hertzbeat.ai.agent.service;
+package org.apache.hertzbeat.ai.service;
 
 /**
  * Ai Configuration Service
diff --git 
a/hertzbeat-ai-agent/src/main/java/org/apache/hertzbeat/ai/agent/service/ChatClientProviderService.java
 
b/hertzbeat-ai/src/main/java/org/apache/hertzbeat/ai/service/ChatClientProviderService.java
similarity index 92%
rename from 
hertzbeat-ai-agent/src/main/java/org/apache/hertzbeat/ai/agent/service/ChatClientProviderService.java
rename to 
hertzbeat-ai/src/main/java/org/apache/hertzbeat/ai/service/ChatClientProviderService.java
index 4b6de16f1..9946ba307 100644
--- 
a/hertzbeat-ai-agent/src/main/java/org/apache/hertzbeat/ai/agent/service/ChatClientProviderService.java
+++ 
b/hertzbeat-ai/src/main/java/org/apache/hertzbeat/ai/service/ChatClientProviderService.java
@@ -16,9 +16,9 @@
  */
 
 
-package org.apache.hertzbeat.ai.agent.service;
+package org.apache.hertzbeat.ai.service;
 
-import org.apache.hertzbeat.ai.agent.pojo.dto.ChatRequestContext;
+import org.apache.hertzbeat.ai.pojo.dto.ChatRequestContext;
 import reactor.core.publisher.Flux;
 
 /**
diff --git 
a/hertzbeat-ai-agent/src/main/java/org/apache/hertzbeat/ai/agent/service/ConversationService.java
 
b/hertzbeat-ai/src/main/java/org/apache/hertzbeat/ai/service/ConversationService.java
similarity index 93%
rename from 
hertzbeat-ai-agent/src/main/java/org/apache/hertzbeat/ai/agent/service/ConversationService.java
rename to 
hertzbeat-ai/src/main/java/org/apache/hertzbeat/ai/service/ConversationService.java
index c481b7563..a33a044eb 100644
--- 
a/hertzbeat-ai-agent/src/main/java/org/apache/hertzbeat/ai/agent/service/ConversationService.java
+++ 
b/hertzbeat-ai/src/main/java/org/apache/hertzbeat/ai/service/ConversationService.java
@@ -16,10 +16,10 @@
  */
 
 
-package org.apache.hertzbeat.ai.agent.service;
+package org.apache.hertzbeat.ai.service;
 
-import org.apache.hertzbeat.ai.agent.pojo.dto.ChatResponseDto;
-import org.apache.hertzbeat.ai.agent.pojo.dto.ConversationDto;
+import org.apache.hertzbeat.ai.pojo.dto.ChatResponseDto;
+import org.apache.hertzbeat.ai.pojo.dto.ConversationDto;
 import org.springframework.http.codec.ServerSentEvent;
 import reactor.core.publisher.Flux;
 
@@ -77,4 +77,4 @@ public interface ConversationService {
      * @return true if conversation exists, false otherwise
      */
     boolean conversationExists(String conversationId);
-}
\ No newline at end of file
+}
diff --git 
a/hertzbeat-ai-agent/src/main/java/org/apache/hertzbeat/ai/agent/service/McpServerService.java
 
b/hertzbeat-ai/src/main/java/org/apache/hertzbeat/ai/service/McpServerService.java
similarity index 94%
rename from 
hertzbeat-ai-agent/src/main/java/org/apache/hertzbeat/ai/agent/service/McpServerService.java
rename to 
hertzbeat-ai/src/main/java/org/apache/hertzbeat/ai/service/McpServerService.java
index 51da725a1..6b518413d 100644
--- 
a/hertzbeat-ai-agent/src/main/java/org/apache/hertzbeat/ai/agent/service/McpServerService.java
+++ 
b/hertzbeat-ai/src/main/java/org/apache/hertzbeat/ai/service/McpServerService.java
@@ -16,10 +16,10 @@
  */
 
 
-package org.apache.hertzbeat.ai.agent.service;
+package org.apache.hertzbeat.ai.service;
 
 import com.fasterxml.jackson.databind.ObjectMapper;
-import org.apache.hertzbeat.ai.agent.config.CustomSseServerTransport;
+import org.apache.hertzbeat.ai.config.CustomSseServerTransport;
 import org.springframework.ai.mcp.server.autoconfigure.McpServerProperties;
 import org.springframework.ai.tool.ToolCallbackProvider;
 import org.springframework.web.servlet.function.RouterFunction;
diff --git 
a/hertzbeat-ai-agent/src/main/java/org/apache/hertzbeat/ai/agent/service/impl/AiConfigServiceImpl.java
 
b/hertzbeat-ai/src/main/java/org/apache/hertzbeat/ai/service/impl/AiConfigServiceImpl.java
similarity index 97%
rename from 
hertzbeat-ai-agent/src/main/java/org/apache/hertzbeat/ai/agent/service/impl/AiConfigServiceImpl.java
rename to 
hertzbeat-ai/src/main/java/org/apache/hertzbeat/ai/service/impl/AiConfigServiceImpl.java
index 1c4031a68..17cb772fe 100644
--- 
a/hertzbeat-ai-agent/src/main/java/org/apache/hertzbeat/ai/agent/service/impl/AiConfigServiceImpl.java
+++ 
b/hertzbeat-ai/src/main/java/org/apache/hertzbeat/ai/service/impl/AiConfigServiceImpl.java
@@ -15,10 +15,10 @@
  * limitations under the License.
  */
 
-package org.apache.hertzbeat.ai.agent.service.impl;
+package org.apache.hertzbeat.ai.service.impl;
 
 import lombok.extern.slf4j.Slf4j;
-import org.apache.hertzbeat.ai.agent.service.AiConfigService;
+import org.apache.hertzbeat.ai.service.AiConfigService;
 import org.apache.hertzbeat.base.dao.GeneralConfigDao;
 import org.springframework.http.HttpEntity;
 import org.springframework.http.HttpHeaders;
diff --git 
a/hertzbeat-ai-agent/src/main/java/org/apache/hertzbeat/ai/agent/service/impl/ChatClientProviderServiceImpl.java
 
b/hertzbeat-ai/src/main/java/org/apache/hertzbeat/ai/service/impl/ChatClientProviderServiceImpl.java
similarity index 92%
rename from 
hertzbeat-ai-agent/src/main/java/org/apache/hertzbeat/ai/agent/service/impl/ChatClientProviderServiceImpl.java
rename to 
hertzbeat-ai/src/main/java/org/apache/hertzbeat/ai/service/impl/ChatClientProviderServiceImpl.java
index d8593a363..565740711 100644
--- 
a/hertzbeat-ai-agent/src/main/java/org/apache/hertzbeat/ai/agent/service/impl/ChatClientProviderServiceImpl.java
+++ 
b/hertzbeat-ai/src/main/java/org/apache/hertzbeat/ai/service/impl/ChatClientProviderServiceImpl.java
@@ -16,18 +16,18 @@
  */
 
 
-package org.apache.hertzbeat.ai.agent.service.impl;
+package org.apache.hertzbeat.ai.service.impl;
 
 import lombok.extern.slf4j.Slf4j;
-import org.apache.hertzbeat.ai.agent.config.PromptProvider;
-import org.apache.hertzbeat.ai.agent.pojo.dto.MessageDto;
-import org.apache.hertzbeat.ai.agent.pojo.dto.ModelProviderConfig;
-import org.apache.hertzbeat.ai.agent.service.ChatClientProviderService;
+import org.apache.hertzbeat.ai.config.PromptProvider;
+import org.apache.hertzbeat.ai.pojo.dto.MessageDto;
+import org.apache.hertzbeat.ai.pojo.dto.ModelProviderConfig;
+import org.apache.hertzbeat.ai.service.ChatClientProviderService;
 import org.apache.hertzbeat.base.dao.GeneralConfigDao;
 import org.apache.hertzbeat.common.entity.manager.GeneralConfig;
 import org.apache.hertzbeat.common.util.JsonUtil;
 import org.springframework.stereotype.Service;
-import org.apache.hertzbeat.ai.agent.pojo.dto.ChatRequestContext;
+import org.apache.hertzbeat.ai.pojo.dto.ChatRequestContext;
 import org.springframework.ai.chat.client.ChatClient;
 import org.springframework.ai.chat.messages.AssistantMessage;
 import org.springframework.ai.chat.messages.Message;
diff --git 
a/hertzbeat-ai-agent/src/main/java/org/apache/hertzbeat/ai/agent/service/impl/ConversationServiceImpl.java
 
b/hertzbeat-ai/src/main/java/org/apache/hertzbeat/ai/service/impl/ConversationServiceImpl.java
similarity index 96%
rename from 
hertzbeat-ai-agent/src/main/java/org/apache/hertzbeat/ai/agent/service/impl/ConversationServiceImpl.java
rename to 
hertzbeat-ai/src/main/java/org/apache/hertzbeat/ai/service/impl/ConversationServiceImpl.java
index 86ff84ff5..9c3530768 100644
--- 
a/hertzbeat-ai-agent/src/main/java/org/apache/hertzbeat/ai/agent/service/impl/ConversationServiceImpl.java
+++ 
b/hertzbeat-ai/src/main/java/org/apache/hertzbeat/ai/service/impl/ConversationServiceImpl.java
@@ -15,15 +15,15 @@
  * limitations under the License.
  */
 
-package org.apache.hertzbeat.ai.agent.service.impl;
+package org.apache.hertzbeat.ai.service.impl;
 
 import lombok.extern.slf4j.Slf4j;
-import org.apache.hertzbeat.ai.agent.pojo.dto.ChatRequestContext;
-import org.apache.hertzbeat.ai.agent.pojo.dto.ChatResponseDto;
-import org.apache.hertzbeat.ai.agent.pojo.dto.ConversationDto;
-import org.apache.hertzbeat.ai.agent.pojo.dto.MessageDto;
-import org.apache.hertzbeat.ai.agent.service.ChatClientProviderService;
-import org.apache.hertzbeat.ai.agent.service.ConversationService;
+import org.apache.hertzbeat.ai.pojo.dto.ChatRequestContext;
+import org.apache.hertzbeat.ai.pojo.dto.ChatResponseDto;
+import org.apache.hertzbeat.ai.pojo.dto.ConversationDto;
+import org.apache.hertzbeat.ai.pojo.dto.MessageDto;
+import org.apache.hertzbeat.ai.service.ChatClientProviderService;
+import org.apache.hertzbeat.ai.service.ConversationService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.codec.ServerSentEvent;
 import org.springframework.stereotype.Service;
diff --git 
a/hertzbeat-ai-agent/src/main/java/org/apache/hertzbeat/ai/agent/service/impl/McpServerServiceImpl.java
 
b/hertzbeat-ai/src/main/java/org/apache/hertzbeat/ai/service/impl/McpServerServiceImpl.java
similarity index 88%
rename from 
hertzbeat-ai-agent/src/main/java/org/apache/hertzbeat/ai/agent/service/impl/McpServerServiceImpl.java
rename to 
hertzbeat-ai/src/main/java/org/apache/hertzbeat/ai/service/impl/McpServerServiceImpl.java
index f946eee6b..6af80b1b1 100644
--- 
a/hertzbeat-ai-agent/src/main/java/org/apache/hertzbeat/ai/agent/service/impl/McpServerServiceImpl.java
+++ 
b/hertzbeat-ai/src/main/java/org/apache/hertzbeat/ai/service/impl/McpServerServiceImpl.java
@@ -16,14 +16,14 @@
  */
 
 
-package org.apache.hertzbeat.ai.agent.service.impl;
+package org.apache.hertzbeat.ai.service.impl;
 
-import org.apache.hertzbeat.ai.agent.config.CustomSseServerTransport;
-import org.apache.hertzbeat.ai.agent.service.McpServerService;
-import org.apache.hertzbeat.ai.agent.tools.AlertDefineTools;
-import org.apache.hertzbeat.ai.agent.tools.AlertTools;
-import org.apache.hertzbeat.ai.agent.tools.MetricsTools;
-import org.apache.hertzbeat.ai.agent.tools.MonitorTools;
+import org.apache.hertzbeat.ai.config.CustomSseServerTransport;
+import org.apache.hertzbeat.ai.service.McpServerService;
+import org.apache.hertzbeat.ai.tools.AlertDefineTools;
+import org.apache.hertzbeat.ai.tools.AlertTools;
+import org.apache.hertzbeat.ai.tools.MetricsTools;
+import org.apache.hertzbeat.ai.tools.MonitorTools;
 import org.springframework.ai.mcp.server.autoconfigure.McpServerProperties;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.context.annotation.Primary;
diff --git 
a/hertzbeat-ai-agent/src/main/java/org/apache/hertzbeat/ai/agent/tools/AlertDefineTools.java
 
b/hertzbeat-ai/src/main/java/org/apache/hertzbeat/ai/tools/AlertDefineTools.java
similarity index 98%
rename from 
hertzbeat-ai-agent/src/main/java/org/apache/hertzbeat/ai/agent/tools/AlertDefineTools.java
rename to 
hertzbeat-ai/src/main/java/org/apache/hertzbeat/ai/tools/AlertDefineTools.java
index 59c401464..19dbd6c6f 100644
--- 
a/hertzbeat-ai-agent/src/main/java/org/apache/hertzbeat/ai/agent/tools/AlertDefineTools.java
+++ 
b/hertzbeat-ai/src/main/java/org/apache/hertzbeat/ai/tools/AlertDefineTools.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.hertzbeat.ai.agent.tools;
+package org.apache.hertzbeat.ai.tools;
 
 /**
  * Tools for alert definition and threshold configuration operations
@@ -88,4 +88,4 @@ public interface AlertDefineTools {
      * @return Result message indicating success or failure
      */
     String bindMonitorsToAlertRule(Long ruleId, String monitorIds);
-}
\ No newline at end of file
+}
diff --git 
a/hertzbeat-ai-agent/src/main/java/org/apache/hertzbeat/ai/agent/tools/AlertTools.java
 b/hertzbeat-ai/src/main/java/org/apache/hertzbeat/ai/tools/AlertTools.java
similarity index 97%
rename from 
hertzbeat-ai-agent/src/main/java/org/apache/hertzbeat/ai/agent/tools/AlertTools.java
rename to 
hertzbeat-ai/src/main/java/org/apache/hertzbeat/ai/tools/AlertTools.java
index 24cab1b20..0aa9688c8 100644
--- 
a/hertzbeat-ai-agent/src/main/java/org/apache/hertzbeat/ai/agent/tools/AlertTools.java
+++ b/hertzbeat-ai/src/main/java/org/apache/hertzbeat/ai/tools/AlertTools.java
@@ -16,7 +16,7 @@
  */
 
 
-package org.apache.hertzbeat.ai.agent.tools;
+package org.apache.hertzbeat.ai.tools;
 
 /**
  * Tools for alert operations and alarm data queries
diff --git 
a/hertzbeat-ai-agent/src/main/java/org/apache/hertzbeat/ai/agent/tools/MetricsTools.java
 b/hertzbeat-ai/src/main/java/org/apache/hertzbeat/ai/tools/MetricsTools.java
similarity index 97%
rename from 
hertzbeat-ai-agent/src/main/java/org/apache/hertzbeat/ai/agent/tools/MetricsTools.java
rename to 
hertzbeat-ai/src/main/java/org/apache/hertzbeat/ai/tools/MetricsTools.java
index 65c8cf6ea..dcf7dafc5 100644
--- 
a/hertzbeat-ai-agent/src/main/java/org/apache/hertzbeat/ai/agent/tools/MetricsTools.java
+++ b/hertzbeat-ai/src/main/java/org/apache/hertzbeat/ai/tools/MetricsTools.java
@@ -16,7 +16,7 @@
  */
 
 
-package org.apache.hertzbeat.ai.agent.tools;
+package org.apache.hertzbeat.ai.tools;
 
 /**
  * Tools for metrics data operations and queries
diff --git 
a/hertzbeat-ai-agent/src/main/java/org/apache/hertzbeat/ai/agent/tools/MonitorTools.java
 b/hertzbeat-ai/src/main/java/org/apache/hertzbeat/ai/tools/MonitorTools.java
similarity index 98%
rename from 
hertzbeat-ai-agent/src/main/java/org/apache/hertzbeat/ai/agent/tools/MonitorTools.java
rename to 
hertzbeat-ai/src/main/java/org/apache/hertzbeat/ai/tools/MonitorTools.java
index 6cec9e5b8..95d6cfe67 100644
--- 
a/hertzbeat-ai-agent/src/main/java/org/apache/hertzbeat/ai/agent/tools/MonitorTools.java
+++ b/hertzbeat-ai/src/main/java/org/apache/hertzbeat/ai/tools/MonitorTools.java
@@ -16,7 +16,7 @@
  */
 
 
-package org.apache.hertzbeat.ai.agent.tools;
+package org.apache.hertzbeat.ai.tools;
 
 import java.util.List;
 
@@ -94,4 +94,4 @@ public interface MonitorTools {
      * @return Formatted string with parameter definitions including field 
names, types, and requirements
      */
     String getMonitorAdditionalParams(String app);
-}
\ No newline at end of file
+}
diff --git 
a/hertzbeat-ai-agent/src/main/java/org/apache/hertzbeat/ai/agent/tools/impl/AlertDefineToolsImpl.java
 
b/hertzbeat-ai/src/main/java/org/apache/hertzbeat/ai/tools/impl/AlertDefineToolsImpl.java
similarity index 98%
rename from 
hertzbeat-ai-agent/src/main/java/org/apache/hertzbeat/ai/agent/tools/impl/AlertDefineToolsImpl.java
rename to 
hertzbeat-ai/src/main/java/org/apache/hertzbeat/ai/tools/impl/AlertDefineToolsImpl.java
index 08a4a5571..2fd8257b9 100644
--- 
a/hertzbeat-ai-agent/src/main/java/org/apache/hertzbeat/ai/agent/tools/impl/AlertDefineToolsImpl.java
+++ 
b/hertzbeat-ai/src/main/java/org/apache/hertzbeat/ai/tools/impl/AlertDefineToolsImpl.java
@@ -15,18 +15,18 @@
  * limitations under the License.
  */
 
-package org.apache.hertzbeat.ai.agent.tools.impl;
+package org.apache.hertzbeat.ai.tools.impl;
 
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.fasterxml.jackson.databind.node.ArrayNode;
 import com.fasterxml.jackson.databind.node.ObjectNode;
 import com.usthe.sureness.subject.SubjectSum;
 import lombok.extern.slf4j.Slf4j;
-import org.apache.hertzbeat.ai.agent.adapters.AlertDefineServiceAdapter;
-import org.apache.hertzbeat.ai.agent.pojo.dto.Hierarchy;
-import org.apache.hertzbeat.ai.agent.config.McpContextHolder;
-import org.apache.hertzbeat.ai.agent.tools.AlertDefineTools;
-import org.apache.hertzbeat.ai.agent.utils.UtilityClass;
+import org.apache.hertzbeat.ai.adapters.AlertDefineServiceAdapter;
+import org.apache.hertzbeat.ai.pojo.dto.Hierarchy;
+import org.apache.hertzbeat.ai.config.McpContextHolder;
+import org.apache.hertzbeat.ai.tools.AlertDefineTools;
+import org.apache.hertzbeat.ai.utils.UtilityClass;
 import org.apache.hertzbeat.common.entity.alerter.AlertDefine;
 import org.springframework.ai.tool.annotation.Tool;
 import org.springframework.ai.tool.annotation.ToolParam;
@@ -662,4 +662,4 @@ public class AlertDefineToolsImpl implements 
AlertDefineTools {
         }
     }
 
-}
\ No newline at end of file
+}
diff --git 
a/hertzbeat-ai-agent/src/main/java/org/apache/hertzbeat/ai/agent/tools/impl/AlertToolsImpl.java
 
b/hertzbeat-ai/src/main/java/org/apache/hertzbeat/ai/tools/impl/AlertToolsImpl.java
similarity index 97%
rename from 
hertzbeat-ai-agent/src/main/java/org/apache/hertzbeat/ai/agent/tools/impl/AlertToolsImpl.java
rename to 
hertzbeat-ai/src/main/java/org/apache/hertzbeat/ai/tools/impl/AlertToolsImpl.java
index 1ada893a1..176876999 100644
--- 
a/hertzbeat-ai-agent/src/main/java/org/apache/hertzbeat/ai/agent/tools/impl/AlertToolsImpl.java
+++ 
b/hertzbeat-ai/src/main/java/org/apache/hertzbeat/ai/tools/impl/AlertToolsImpl.java
@@ -16,14 +16,14 @@
  */
 
 
-package org.apache.hertzbeat.ai.agent.tools.impl;
+package org.apache.hertzbeat.ai.tools.impl;
 
 import com.usthe.sureness.subject.SubjectSum;
 import lombok.extern.slf4j.Slf4j;
-import org.apache.hertzbeat.ai.agent.adapters.AlertServiceAdapter;
-import org.apache.hertzbeat.ai.agent.config.McpContextHolder;
-import org.apache.hertzbeat.ai.agent.tools.AlertTools;
-import org.apache.hertzbeat.ai.agent.utils.UtilityClass;
+import org.apache.hertzbeat.ai.adapters.AlertServiceAdapter;
+import org.apache.hertzbeat.ai.config.McpContextHolder;
+import org.apache.hertzbeat.ai.tools.AlertTools;
+import org.apache.hertzbeat.ai.utils.UtilityClass;
 import org.apache.hertzbeat.alert.dto.AlertSummary;
 import org.apache.hertzbeat.common.entity.alerter.GroupAlert;
 import org.apache.hertzbeat.common.entity.alerter.SingleAlert;
diff --git 
a/hertzbeat-ai-agent/src/main/java/org/apache/hertzbeat/ai/agent/tools/impl/MetricsToolsImpl.java
 
b/hertzbeat-ai/src/main/java/org/apache/hertzbeat/ai/tools/impl/MetricsToolsImpl.java
similarity index 97%
rename from 
hertzbeat-ai-agent/src/main/java/org/apache/hertzbeat/ai/agent/tools/impl/MetricsToolsImpl.java
rename to 
hertzbeat-ai/src/main/java/org/apache/hertzbeat/ai/tools/impl/MetricsToolsImpl.java
index 1a8d03c29..beb0cb180 100644
--- 
a/hertzbeat-ai-agent/src/main/java/org/apache/hertzbeat/ai/agent/tools/impl/MetricsToolsImpl.java
+++ 
b/hertzbeat-ai/src/main/java/org/apache/hertzbeat/ai/tools/impl/MetricsToolsImpl.java
@@ -16,14 +16,14 @@
  */
 
 
-package org.apache.hertzbeat.ai.agent.tools.impl;
+package org.apache.hertzbeat.ai.tools.impl;
 
 import com.usthe.sureness.subject.SubjectSum;
 import lombok.extern.slf4j.Slf4j;
-import org.apache.hertzbeat.ai.agent.adapters.MetricsServiceAdapter;
-import org.apache.hertzbeat.ai.agent.adapters.MonitorServiceAdapter;
-import org.apache.hertzbeat.ai.agent.config.McpContextHolder;
-import org.apache.hertzbeat.ai.agent.tools.MetricsTools;
+import org.apache.hertzbeat.ai.adapters.MetricsServiceAdapter;
+import org.apache.hertzbeat.ai.adapters.MonitorServiceAdapter;
+import org.apache.hertzbeat.ai.config.McpContextHolder;
+import org.apache.hertzbeat.ai.tools.MetricsTools;
 import org.apache.hertzbeat.common.entity.dto.Field;
 import org.apache.hertzbeat.common.entity.dto.MetricsData;
 import org.apache.hertzbeat.common.entity.dto.MetricsHistoryData;
@@ -260,4 +260,4 @@ public class MetricsToolsImpl implements MetricsTools {
         }
     }
 
-}
\ No newline at end of file
+}
diff --git 
a/hertzbeat-ai-agent/src/main/java/org/apache/hertzbeat/ai/agent/tools/impl/MonitorToolsImpl.java
 
b/hertzbeat-ai/src/main/java/org/apache/hertzbeat/ai/tools/impl/MonitorToolsImpl.java
similarity index 98%
rename from 
hertzbeat-ai-agent/src/main/java/org/apache/hertzbeat/ai/agent/tools/impl/MonitorToolsImpl.java
rename to 
hertzbeat-ai/src/main/java/org/apache/hertzbeat/ai/tools/impl/MonitorToolsImpl.java
index 12e73985f..cd3a47962 100644
--- 
a/hertzbeat-ai-agent/src/main/java/org/apache/hertzbeat/ai/agent/tools/impl/MonitorToolsImpl.java
+++ 
b/hertzbeat-ai/src/main/java/org/apache/hertzbeat/ai/tools/impl/MonitorToolsImpl.java
@@ -15,17 +15,17 @@
  * limitations under the License.
  */
 
-package org.apache.hertzbeat.ai.agent.tools.impl;
+package org.apache.hertzbeat.ai.tools.impl;
 
 import com.usthe.sureness.subject.SubjectSum;
 import lombok.extern.slf4j.Slf4j;
-import org.apache.hertzbeat.ai.agent.adapters.MonitorServiceAdapter;
-import org.apache.hertzbeat.ai.agent.config.McpContextHolder;
-import org.apache.hertzbeat.ai.agent.utils.UtilityClass;
+import org.apache.hertzbeat.ai.adapters.MonitorServiceAdapter;
+import org.apache.hertzbeat.ai.config.McpContextHolder;
+import org.apache.hertzbeat.ai.utils.UtilityClass;
 import org.springframework.ai.tool.annotation.Tool;
 import org.springframework.data.domain.Page;
 import org.springframework.stereotype.Service;
-import org.apache.hertzbeat.ai.agent.tools.MonitorTools;
+import org.apache.hertzbeat.ai.tools.MonitorTools;
 import org.springframework.ai.tool.annotation.ToolParam;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.apache.hertzbeat.common.entity.manager.Monitor;
diff --git 
a/hertzbeat-ai-agent/src/main/java/org/apache/hertzbeat/ai/agent/utils/UtilityClass.java
 b/hertzbeat-ai/src/main/java/org/apache/hertzbeat/ai/utils/UtilityClass.java
similarity index 99%
rename from 
hertzbeat-ai-agent/src/main/java/org/apache/hertzbeat/ai/agent/utils/UtilityClass.java
rename to 
hertzbeat-ai/src/main/java/org/apache/hertzbeat/ai/utils/UtilityClass.java
index db108dfb4..64c1a06f8 100644
--- 
a/hertzbeat-ai-agent/src/main/java/org/apache/hertzbeat/ai/agent/utils/UtilityClass.java
+++ b/hertzbeat-ai/src/main/java/org/apache/hertzbeat/ai/utils/UtilityClass.java
@@ -15,14 +15,14 @@
  * limitations under the License.
  */
 
-package org.apache.hertzbeat.ai.agent.utils;
+package org.apache.hertzbeat.ai.utils;
 
 
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.fasterxml.jackson.databind.node.ArrayNode;
 import com.fasterxml.jackson.databind.node.ObjectNode;
 import lombok.extern.slf4j.Slf4j;
-import org.apache.hertzbeat.ai.agent.pojo.dto.Hierarchy;
+import org.apache.hertzbeat.ai.pojo.dto.Hierarchy;
 
 import java.lang.reflect.Method;
 import java.time.Instant;
diff --git 
a/hertzbeat-alerter/src/test/java/org/apache/hertzbeat/alert/service/AlertDefineServiceTest.java
 
b/hertzbeat-alerter/src/test/java/org/apache/hertzbeat/alert/service/AlertDefineServiceTest.java
index 825e34434..4f40c17de 100644
--- 
a/hertzbeat-alerter/src/test/java/org/apache/hertzbeat/alert/service/AlertDefineServiceTest.java
+++ 
b/hertzbeat-alerter/src/test/java/org/apache/hertzbeat/alert/service/AlertDefineServiceTest.java
@@ -105,19 +105,19 @@ class AlertDefineServiceTest {
 
     @Test
     void addAlertDefine() {
-        assertDoesNotThrow(() -> 
alertDefineService.addAlertDefine(alertDefine));
+        assertDoesNotThrow(() -> 
this.alertDefineService.addAlertDefine(alertDefine));
         when(alertDefineDao.saveAndFlush(alertDefine)).thenThrow(new 
RuntimeException());
-        assertThrows(RuntimeException.class, () -> 
alertDefineService.addAlertDefine(alertDefine));
+        assertThrows(RuntimeException.class, () -> 
this.alertDefineService.addAlertDefine(alertDefine));
     }
 
     @Test
     void modifyAlertDefine() {
         AlertDefine alertDefine = AlertDefine.builder().id(1L).build();
         when(alertDefineDao.saveAndFlush(alertDefine)).thenReturn(alertDefine);
-        assertDoesNotThrow(() -> 
alertDefineService.modifyAlertDefine(alertDefine));
+        assertDoesNotThrow(() -> 
this.alertDefineService.modifyAlertDefine(alertDefine));
         reset();
         when(alertDefineDao.saveAndFlush(alertDefine)).thenThrow(new 
RuntimeException());
-        assertThrows(RuntimeException.class, () -> 
alertDefineService.modifyAlertDefine(alertDefine));
+        assertThrows(RuntimeException.class, () -> 
this.alertDefineService.modifyAlertDefine(alertDefine));
     }
 
     @Test
diff --git 
a/hertzbeat-common/src/main/java/org/apache/hertzbeat/common/constants/ConfigConstants.java
 
b/hertzbeat-common/src/main/java/org/apache/hertzbeat/common/constants/ConfigConstants.java
index d71e7dc2e..47e8bacfe 100644
--- 
a/hertzbeat-common/src/main/java/org/apache/hertzbeat/common/constants/ConfigConstants.java
+++ 
b/hertzbeat-common/src/main/java/org/apache/hertzbeat/common/constants/ConfigConstants.java
@@ -42,6 +42,8 @@ public interface ConfigConstants {
      */
     interface FunctionModuleConstants {
 
+        String MANAGER = "manager";
+        
         String ALERT = "alert";
 
         String ALERTER = "alerter";
diff --git a/hertzbeat-e2e/hertzbeat-log-e2e/pom.xml 
b/hertzbeat-e2e/hertzbeat-log-e2e/pom.xml
index 184e82a21..490802985 100644
--- a/hertzbeat-e2e/hertzbeat-log-e2e/pom.xml
+++ b/hertzbeat-e2e/hertzbeat-log-e2e/pom.xml
@@ -40,6 +40,12 @@
 
     <dependencies>
         <!-- HertzBeat modules -->
+        <dependency>
+            <groupId>org.apache.hertzbeat</groupId>
+            <artifactId>hertzbeat-startup</artifactId>
+            <version>${hertzbeat.version}</version>
+            <scope>test</scope>
+        </dependency>
         <dependency>
             <groupId>org.apache.hertzbeat</groupId>
             <artifactId>hertzbeat-manager</artifactId>
@@ -100,61 +106,4 @@
             <scope>test</scope>
         </dependency>
     </dependencies>
-
-    <build>
-        <plugins>
-            <!-- Copy manager resources to test classpath -->
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-dependency-plugin</artifactId>
-                <version>${maven.dependency.plugin.version}</version>
-                <executions>
-                    <execution>
-                        <id>unpack-manager-resources</id>
-                        <phase>generate-test-resources</phase>
-                        <goals>
-                            <goal>unpack</goal>
-                        </goals>
-                        <configuration>
-                            <artifactItems>
-                                <artifactItem>
-                                    <groupId>org.apache.hertzbeat</groupId>
-                                    <artifactId>hertzbeat-manager</artifactId>
-                                    <version>${hertzbeat.version}</version>
-                                    <type>jar</type>
-                                    <overWrite>true</overWrite>
-                                    
<outputDirectory>${project.build.testOutputDirectory}</outputDirectory>
-                                    <includes>
-                                        define/**,
-                                        db/**,
-                                        templates/**,
-                                        grafana/**,
-                                        *.yml,
-                                        *.xml,
-                                        *.txt
-                                    </includes>
-                                </artifactItem>
-                            </artifactItems>
-                        </configuration>
-                    </execution>
-                </executions>
-            </plugin>
-            
-            <!-- Ensure test resources are processed -->
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-resources-plugin</artifactId>
-                <version>${maven.resources.plugin.version}</version>
-                <executions>
-                    <execution>
-                        <id>copy-test-resources</id>
-                        <phase>generate-test-resources</phase>
-                        <goals>
-                            <goal>testResources</goal>
-                        </goals>
-                    </execution>
-                </executions>
-            </plugin>
-        </plugins>
-    </build>
 </project>
diff --git 
a/hertzbeat-e2e/hertzbeat-log-e2e/src/test/java/org/apache/hertzbeat/log/alert/LogPeriodicAlertE2eTest.java
 
b/hertzbeat-e2e/hertzbeat-log-e2e/src/test/java/org/apache/hertzbeat/log/alert/LogPeriodicAlertE2eTest.java
index e9cc69963..e3c387dbe 100644
--- 
a/hertzbeat-e2e/hertzbeat-log-e2e/src/test/java/org/apache/hertzbeat/log/alert/LogPeriodicAlertE2eTest.java
+++ 
b/hertzbeat-e2e/hertzbeat-log-e2e/src/test/java/org/apache/hertzbeat/log/alert/LogPeriodicAlertE2eTest.java
@@ -58,7 +58,7 @@ import static org.mockito.Mockito.doAnswer;
 /**
  * E2E tests for periodic log alert processing.
  */
-@SpringBootTest(classes = org.apache.hertzbeat.manager.Manager.class, 
webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
+@SpringBootTest(classes = 
org.apache.hertzbeat.startup.HertzBeatApplication.class, webEnvironment = 
SpringBootTest.WebEnvironment.RANDOM_PORT)
 @Slf4j
 @TestInstance(TestInstance.Lifecycle.PER_CLASS)
 public class LogPeriodicAlertE2eTest {
diff --git 
a/hertzbeat-e2e/hertzbeat-log-e2e/src/test/java/org/apache/hertzbeat/log/alert/LogRealTimeAlertE2eTest.java
 
b/hertzbeat-e2e/hertzbeat-log-e2e/src/test/java/org/apache/hertzbeat/log/alert/LogRealTimeAlertE2eTest.java
index a71f53ad5..11b42b378 100644
--- 
a/hertzbeat-e2e/hertzbeat-log-e2e/src/test/java/org/apache/hertzbeat/log/alert/LogRealTimeAlertE2eTest.java
+++ 
b/hertzbeat-e2e/hertzbeat-log-e2e/src/test/java/org/apache/hertzbeat/log/alert/LogRealTimeAlertE2eTest.java
@@ -55,7 +55,7 @@ import static org.mockito.Mockito.doAnswer;
 /**
  * E2E tests for real-time log alert processing.
  */
-@SpringBootTest(classes = org.apache.hertzbeat.manager.Manager.class, 
webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
+@SpringBootTest(classes = 
org.apache.hertzbeat.startup.HertzBeatApplication.class, webEnvironment = 
SpringBootTest.WebEnvironment.RANDOM_PORT)
 @Slf4j
 @TestInstance(TestInstance.Lifecycle.PER_CLASS)
 public class LogRealTimeAlertE2eTest {
diff --git 
a/hertzbeat-e2e/hertzbeat-log-e2e/src/test/java/org/apache/hertzbeat/log/ingestion/LogIngestionE2eTest.java
 
b/hertzbeat-e2e/hertzbeat-log-e2e/src/test/java/org/apache/hertzbeat/log/ingestion/LogIngestionE2eTest.java
index 453e6749c..dd9552240 100644
--- 
a/hertzbeat-e2e/hertzbeat-log-e2e/src/test/java/org/apache/hertzbeat/log/ingestion/LogIngestionE2eTest.java
+++ 
b/hertzbeat-e2e/hertzbeat-log-e2e/src/test/java/org/apache/hertzbeat/log/ingestion/LogIngestionE2eTest.java
@@ -44,7 +44,7 @@ import static org.junit.jupiter.api.Assertions.assertNotNull;
 /**
  * E2E tests for log ingestion.
  */
-@SpringBootTest(classes = org.apache.hertzbeat.manager.Manager.class, 
webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
+@SpringBootTest(classes = 
org.apache.hertzbeat.startup.HertzBeatApplication.class, webEnvironment = 
SpringBootTest.WebEnvironment.RANDOM_PORT)
 @Slf4j
 @TestInstance(TestInstance.Lifecycle.PER_CLASS)
 public class LogIngestionE2eTest {
diff --git 
a/hertzbeat-e2e/hertzbeat-log-e2e/src/test/java/org/apache/hertzbeat/log/storage/GreptimeLogStorageE2eTest.java
 
b/hertzbeat-e2e/hertzbeat-log-e2e/src/test/java/org/apache/hertzbeat/log/storage/GreptimeLogStorageE2eTest.java
index 8d5b6f8de..4aba2f1eb 100644
--- 
a/hertzbeat-e2e/hertzbeat-log-e2e/src/test/java/org/apache/hertzbeat/log/storage/GreptimeLogStorageE2eTest.java
+++ 
b/hertzbeat-e2e/hertzbeat-log-e2e/src/test/java/org/apache/hertzbeat/log/storage/GreptimeLogStorageE2eTest.java
@@ -47,7 +47,7 @@ import static org.junit.jupiter.api.Assertions.assertNotNull;
 /**
  * E2E tests for GreptimeDB log storage.
  */
-@SpringBootTest(classes = org.apache.hertzbeat.manager.Manager.class, 
webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
+@SpringBootTest(classes = 
org.apache.hertzbeat.startup.HertzBeatApplication.class, webEnvironment = 
SpringBootTest.WebEnvironment.RANDOM_PORT)
 @Slf4j
 @TestInstance(TestInstance.Lifecycle.PER_CLASS)
 public class GreptimeLogStorageE2eTest {
diff --git a/hertzbeat-manager/src/main/resources/sureness.yml 
b/hertzbeat-e2e/hertzbeat-log-e2e/src/test/resources/sureness.yml
similarity index 100%
copy from hertzbeat-manager/src/main/resources/sureness.yml
copy to hertzbeat-e2e/hertzbeat-log-e2e/src/test/resources/sureness.yml
diff --git a/hertzbeat-e2e/pom.xml b/hertzbeat-e2e/pom.xml
index 55e3e399c..8b60b55dc 100644
--- a/hertzbeat-e2e/pom.xml
+++ b/hertzbeat-e2e/pom.xml
@@ -70,7 +70,7 @@
         </dependency>
         <dependency>
             <groupId>org.apache.hertzbeat</groupId>
-            <artifactId>hertzbeat-manager</artifactId>
+            <artifactId>hertzbeat-startup</artifactId>
             <version>${hertzbeat.version}</version>
             <scope>test</scope>
         </dependency>
diff --git a/hertzbeat-manager/pom.xml b/hertzbeat-manager/pom.xml
index 6140b34d7..31650f8a2 100644
--- a/hertzbeat-manager/pom.xml
+++ b/hertzbeat-manager/pom.xml
@@ -27,10 +27,7 @@
     <name>${project.artifactId}</name>
     <packaging>jar</packaging>
 
-    <properties>
-        <maven.install.skip>true</maven.install.skip>
-    </properties>
-
+  
     <dependencies>
         <!-- common -->
         <dependency>
@@ -217,7 +214,7 @@
         </dependency>
         <dependency>
             <groupId>org.apache.hertzbeat</groupId>
-            <artifactId>hertzbeat-ai-agent</artifactId>
+            <artifactId>hertzbeat-ai</artifactId>
             <version>${project.version}</version>
         </dependency>
         <dependency>
@@ -226,217 +223,4 @@
         </dependency>
     </dependencies>
 
-    <build>
-        <finalName>apache-hertzbeat-${hzb.version}</finalName>
-        <resources>
-            <resource>
-                <directory>src/main/resources</directory>
-                <filtering>true</filtering>
-                <includes>
-                    <include>*.yml</include>
-                    <include>*.properties</include>
-                    <include>*.xml</include>
-                    <include>banner.txt</include>
-                    <include>define/**</include>
-                    <include>db/**</include>
-                    <include>templates/**</include>
-                    <include>**/*.html</include>
-                </includes>
-            </resource>
-        </resources>
-        <plugins>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-jar-plugin</artifactId>
-                <version>${maven-jar-plugin.version}</version>
-                <configuration>
-                    <classesDirectory>target/classes/</classesDirectory>
-                    <archive>
-                        <!--Exclude maven descriptors from generated JAR-->
-                        <addMavenDescriptor>false</addMavenDescriptor>
-                        <manifest>
-                            <!--Main class of the project-->
-                            
<mainClass>org.apache.hertzbeat.manager.Manager</mainClass>
-                            <useUniqueVersions>false</useUniqueVersions>
-                            <!--Add third-party JARs to the classpath using 
maven-dependency-plugin-->
-                            <addClasspath>true</addClasspath>
-                            <!--Location of external dependency JARs-->
-                            <classpathPrefix>lib/</classpathPrefix>
-                        </manifest>
-                        <manifestEntries>
-                            <Class-Path>. config</Class-Path>
-                        </manifestEntries>
-                    </archive>
-                </configuration>
-            </plugin>
-        </plugins>
-    </build>
-
-    <profiles>
-        <profile>
-            <id>release</id>
-            <build>
-                <plugins>
-                    <!--Critical plugin, assembly plugin provided by maven, 
should be placed last-->
-                    <plugin>
-                        <groupId>org.apache.maven.plugins</groupId>
-                        <artifactId>maven-assembly-plugin</artifactId>
-                        <version>${maven-assembly-plugin.version}</version>
-                        <executions>
-                            <execution>
-                                <id>make-zip</id>
-                                <!--Bound maven operation-->
-                                <phase>package</phase>
-                                <!--Run once-->
-                                <goals>
-                                    <goal>single</goal>
-                                </goals>
-                                <configuration>
-                                    <outputDirectory>../dist</outputDirectory>
-                                    <descriptors>
-                                        
<descriptor>../script/assembly/server/assembly.xml</descriptor>
-                                    </descriptors>
-                                </configuration>
-                            </execution>
-                            <execution>
-                                <id>make-docker-zip</id>
-                                <!--Bound maven operation-->
-                                <phase>package</phase>
-                                <!--Run once-->
-                                <goals>
-                                    <goal>single</goal>
-                                </goals>
-                                <configuration>
-                                    <outputDirectory>../dist</outputDirectory>
-                                    <descriptors>
-                                        
<descriptor>../script/assembly/server/assembly-docker.xml</descriptor>
-                                    </descriptors>
-                                </configuration>
-                            </execution>
-                            <execution>
-                                <id>make-docker-compose-script</id>
-                                <!--Bound maven operation-->
-                                <phase>package</phase>
-                                <!--Run once-->
-                                <goals>
-                                    <goal>single</goal>
-                                </goals>
-                                <configuration>
-                                    <outputDirectory>../dist</outputDirectory>
-                                    <descriptors>
-                                        
<descriptor>../script/assembly/server/assembly-docker-compose.xml</descriptor>
-                                    </descriptors>
-                                </configuration>
-                            </execution>
-                        </executions>
-                    </plugin>
-                </plugins>
-            </build>
-        </profile>
-        <profile>
-            <id>runtime</id>
-            <build>
-                <plugins>
-                    <plugin>
-                        <groupId>org.apache.maven.plugins</groupId>
-                        <artifactId>maven-assembly-plugin</artifactId>
-                        <version>${maven-assembly-plugin.version}</version>
-                        <executions>
-                            <execution>
-                                <id>make-macos-arm64</id>
-                                <!--Bound maven operation-->
-                                <phase>package</phase>
-                                <!--Run once-->
-                                <goals>
-                                    <goal>single</goal>
-                                </goals>
-                                <configuration>
-                                    <descriptors>
-                                        
<descriptor>../script/assembly/server/assembly-macos-arm64.xml</descriptor>
-                                    </descriptors>
-                                    <outputDirectory>../dist</outputDirectory>
-                                </configuration>
-                            </execution>
-                            <execution>
-                                <id>make-macos-amd64</id>
-                                <!--Bound maven operation-->
-                                <phase>package</phase>
-                                <!--Run once-->
-                                <goals>
-                                    <goal>single</goal>
-                                </goals>
-                                <configuration>
-                                    <descriptors>
-                                        
<descriptor>../script/assembly/server/assembly-macos-amd64.xml</descriptor>
-                                    </descriptors>
-                                    <outputDirectory>../dist</outputDirectory>
-                                </configuration>
-                            </execution>
-                            <execution>
-                                <id>make-linux-arm64</id>
-                                <!--Bound maven operation-->
-                                <phase>package</phase>
-                                <!--Run once-->
-                                <goals>
-                                    <goal>single</goal>
-                                </goals>
-                                <configuration>
-                                    <descriptors>
-                                        
<descriptor>../script/assembly/server/assembly-linux-arm64.xml</descriptor>
-                                    </descriptors>
-                                    <outputDirectory>../dist</outputDirectory>
-                                </configuration>
-                            </execution>
-                            <execution>
-                                <id>make-linux-amd64</id>
-                                <!--Bound maven operation-->
-                                <phase>package</phase>
-                                <!--Run once-->
-                                <goals>
-                                    <goal>single</goal>
-                                </goals>
-                                <configuration>
-                                    <descriptors>
-                                        
<descriptor>../script/assembly/server/assembly-linux-amd64.xml</descriptor>
-                                    </descriptors>
-                                    <outputDirectory>../dist</outputDirectory>
-                                </configuration>
-                            </execution>
-                            <execution>
-                                <id>make-windows-64</id>
-                                <!--Bound maven operation-->
-                                <phase>package</phase>
-                                <!--Run once-->
-                                <goals>
-                                    <goal>single</goal>
-                                </goals>
-                                <configuration>
-                                    <descriptors>
-                                        
<descriptor>../script/assembly/server/assembly-windows-64.xml</descriptor>
-                                    </descriptors>
-                                    <outputDirectory>../dist</outputDirectory>
-                                </configuration>
-                            </execution>
-                            <execution>
-                                <id>make-docker-compose-script</id>
-                                <!--Bound maven operation-->
-                                <phase>package</phase>
-                                <!--Run once-->
-                                <goals>
-                                    <goal>single</goal>
-                                </goals>
-                                <configuration>
-                                    <descriptors>
-                                        
<descriptor>../script/assembly/server/assembly-docker-compose.xml</descriptor>
-                                    </descriptors>
-                                    <outputDirectory>../dist</outputDirectory>
-                                </configuration>
-                            </execution>
-                        </executions>
-                    </plugin>
-                </plugins>
-            </build>
-        </profile>
-    </profiles>
-
 </project>
diff --git 
a/hertzbeat-manager/src/test/java/org/apache/hertzbeat/manager/AbstractSpringIntegrationTest.java
 
b/hertzbeat-manager/src/main/java/org/apache/hertzbeat/manager/config/ManagerAutoConfiguration.java
similarity index 61%
copy from 
hertzbeat-manager/src/test/java/org/apache/hertzbeat/manager/AbstractSpringIntegrationTest.java
copy to 
hertzbeat-manager/src/main/java/org/apache/hertzbeat/manager/config/ManagerAutoConfiguration.java
index e22c4a0d1..4e0c3422f 100644
--- 
a/hertzbeat-manager/src/test/java/org/apache/hertzbeat/manager/AbstractSpringIntegrationTest.java
+++ 
b/hertzbeat-manager/src/main/java/org/apache/hertzbeat/manager/config/ManagerAutoConfiguration.java
@@ -15,16 +15,20 @@
  * limitations under the License.
  */
 
-package org.apache.hertzbeat.manager;
+package org.apache.hertzbeat.manager.config;
 
-import org.springframework.boot.test.context.SpringBootTest;
-import org.springframework.test.context.ActiveProfiles;
+import org.apache.hertzbeat.common.constants.ConfigConstants;
+import org.apache.hertzbeat.common.constants.SignConstants;
+import org.springframework.boot.autoconfigure.AutoConfiguration;
+import org.springframework.context.annotation.ComponentScan;
 
 /**
- * Abstract Integration Test for Spring.
+ * Manager auto configuration.
  */
-@ActiveProfiles("test")
-@SpringBootTest(classes = Manager.class, webEnvironment = 
SpringBootTest.WebEnvironment.RANDOM_PORT)
-public class AbstractSpringIntegrationTest {
 
+@AutoConfiguration
+@ComponentScan(basePackages = ConfigConstants.PkgConstant.PKG
+               + SignConstants.DOT
+               + ConfigConstants.FunctionModuleConstants.MANAGER)
+public class ManagerAutoConfiguration {
 }
diff --git 
a/hertzbeat-manager/src/main/java/org/apache/hertzbeat/manager/service/impl/ModelProviderConfigServiceImpl.java
 
b/hertzbeat-manager/src/main/java/org/apache/hertzbeat/manager/service/impl/ModelProviderConfigServiceImpl.java
index 82c637e36..22d93909d 100644
--- 
a/hertzbeat-manager/src/main/java/org/apache/hertzbeat/manager/service/impl/ModelProviderConfigServiceImpl.java
+++ 
b/hertzbeat-manager/src/main/java/org/apache/hertzbeat/manager/service/impl/ModelProviderConfigServiceImpl.java
@@ -20,7 +20,7 @@ package org.apache.hertzbeat.manager.service.impl;
 import com.fasterxml.jackson.core.type.TypeReference;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import java.lang.reflect.Type;
-import org.apache.hertzbeat.ai.agent.pojo.dto.ModelProviderConfig;
+import org.apache.hertzbeat.ai.pojo.dto.ModelProviderConfig;
 import org.apache.hertzbeat.base.dao.GeneralConfigDao;
 import org.apache.hertzbeat.common.constants.GeneralConfigTypeEnum;
 import org.apache.hertzbeat.common.support.event.AiProviderConfigChangeEvent;
diff --git a/hertzbeat-mcp/src/main/resources/application.yml 
b/hertzbeat-manager/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
similarity index 82%
copy from hertzbeat-mcp/src/main/resources/application.yml
copy to 
hertzbeat-manager/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
index b6114e217..35ed8bf37 100644
--- a/hertzbeat-mcp/src/main/resources/application.yml
+++ 
b/hertzbeat-manager/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
@@ -13,16 +13,4 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-spring:
-  main:
-    banner-mode: off
-  ai:
-    mcp:
-      server:
-        name: hertzbeat-log-analysis-server
-        version: 0.1
-
-#
-#logging:
-#  file:
-#    name:
+org.apache.hertzbeat.manager.config.ManagerAutoConfiguration
diff --git 
a/hertzbeat-manager/src/test/java/org/apache/hertzbeat/manager/service/AlertDefineServiceIntegrationTest.java
 
b/hertzbeat-manager/src/test/java/org/apache/hertzbeat/manager/service/AlertDefineServiceIntegrationTest.java
deleted file mode 100644
index cabde6336..000000000
--- 
a/hertzbeat-manager/src/test/java/org/apache/hertzbeat/manager/service/AlertDefineServiceIntegrationTest.java
+++ /dev/null
@@ -1,123 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.hertzbeat.manager.service;
-
-import org.apache.hertzbeat.alert.dao.AlertDefineDao;
-import org.apache.hertzbeat.alert.service.AlertDefineService;
-import org.apache.hertzbeat.common.entity.alerter.AlertDefine;
-import org.apache.hertzbeat.manager.AbstractSpringIntegrationTest;
-import org.junit.jupiter.api.AfterEach;
-import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.Test;
-import org.springframework.beans.factory.annotation.Autowired;
-
-import java.time.LocalDateTime;
-import java.util.ArrayList;
-import java.util.List;
-
-import static org.junit.jupiter.api.Assertions.assertDoesNotThrow;
-import static org.junit.jupiter.api.Assertions.assertEquals;
-import static org.junit.jupiter.api.Assertions.assertNotNull;
-import static org.junit.jupiter.api.Assertions.assertNull;
-import static org.junit.jupiter.api.Assertions.assertTrue;
-
-/**
- * Test case for {@link AlertDefineService}
- */
-public class AlertDefineServiceIntegrationTest extends 
AbstractSpringIntegrationTest {
-
-    @Autowired
-    private AlertDefineService alertDefineService;
-    @Autowired
-    private AlertDefineDao alertDefineDao;
-
-    private List<Long> createdIds = new ArrayList<>();
-
-    @BeforeEach
-    void setUp() {
-        createdIds.clear();
-    }
-
-    @AfterEach
-    void tearDown() {
-        for (Long id : createdIds) {
-            if (alertDefineDao.existsById(id)) {
-                alertDefineDao.deleteById(id);
-            }
-        }
-    }
-
-    @Test
-    void testAddAlertDefine() {
-        AlertDefine alertDefine = AlertDefine.builder()
-                .name("test-cpu-alert")
-                .expr("usage > 80")
-                .times(3)
-                .type("periodic")
-                .enable(true)
-                .period(10)
-                .template("CPU usage is excessively high: ${usage}%")
-                .creator("integration-test")
-                .modifier("integration-test")
-                .gmtCreate(LocalDateTime.now())
-                .gmtUpdate(LocalDateTime.now())
-                .build();
-        assertNull(alertDefine.getId());
-        assertDoesNotThrow(() -> 
alertDefineService.addAlertDefine(alertDefine));
-
-        assertNotNull(alertDefine.getId());
-        assertTrue(alertDefine.getId() > 0);
-
-        createdIds.add(alertDefine.getId());
-
-        AlertDefine savedAlertDefine = 
alertDefineDao.findById(alertDefine.getId()).orElse(null);
-        assertNotNull(savedAlertDefine);
-        assertEquals("usage > 80", savedAlertDefine.getExpr());
-        assertEquals("integration-test", savedAlertDefine.getCreator());
-    }
-
-    @Test
-    void testModifyAlertDefine() {
-        AlertDefine alertDefine = AlertDefine.builder()
-                .name("test-cpu-alert")
-                .expr("usage > 80")
-                .times(3)
-                .type("periodic")
-                .enable(true)
-                .period(10)
-                .template("CPU usage is excessively high: ${usage}%")
-                .creator("integration-test")
-                .modifier("integration-test")
-                .gmtCreate(LocalDateTime.now())
-                .gmtUpdate(LocalDateTime.now())
-                .build();
-        assertNull(alertDefine.getId());
-        assertDoesNotThrow(() -> 
alertDefineService.modifyAlertDefine(alertDefine));
-
-        assertNotNull(alertDefine.getId());
-        assertTrue(alertDefine.getId() > 0);
-
-        createdIds.add(alertDefine.getId());
-
-        AlertDefine savedAlertDefine = 
alertDefineDao.findById(alertDefine.getId()).orElse(null);
-        assertNotNull(savedAlertDefine);
-        assertEquals("usage > 80", savedAlertDefine.getExpr());
-        assertEquals("integration-test", savedAlertDefine.getCreator());
-    }
-
-}
\ No newline at end of file
diff --git a/hertzbeat-manager/src/main/resources/sureness.yml 
b/hertzbeat-manager/src/test/resources/sureness.yml
similarity index 100%
copy from hertzbeat-manager/src/main/resources/sureness.yml
copy to hertzbeat-manager/src/test/resources/sureness.yml
diff --git a/hertzbeat-startup/README.md b/hertzbeat-startup/README.md
new file mode 100644
index 000000000..7d6a59f1e
--- /dev/null
+++ b/hertzbeat-startup/README.md
@@ -0,0 +1,135 @@
+# HertzBeat Startup Module
+
+## 概述
+
+`hertzbeat-startup` 模块是为了实现 HertzBeat 项目的模块化重构而创建的启动模块。该模块专门负责应用的启动和初始化任务,将原本由 
`hertzbeat-manager` 模块承担的启动职责分离出来,实现更好的关注点分离。
+
+## 模块职责
+
+该启动模块主要负责以下启动任务:
+
+1. **主应用启动** - 通过 `HertzBeatApplication` 类作为主入口点
+2. **系统配置初始化** - 通过 `SystemConfigInitializer` 初始化系统配置、JWT密钥、AES密钥等
+3. **调度系统初始化** - 通过 `SchedulerSystemInitializer` 初始化收集器状态和监控任务
+4. **Netty服务器启动** - 通过 `NettyServerInitializer` 启动集群通信服务器
+
+## 架构设计
+
+### 原有架构问题
+- `manager` 模块既负责业务逻辑又负责启动,职责不够清晰
+- 启动代码散布在多个文件中,不利于维护
+
+### 重构后的架构
+```
+hertzbeat-startup/
+├── src/main/java/org/apache/hertzbeat/startup/
+│   ├── HertzBeatApplication.java          # 主启动类
+│   ├── config/
+│   │   └── SystemConfigInitializer.java   # 系统配置初始化
+│   └── scheduler/
+│       ├── SchedulerSystemInitializer.java  # 调度系统初始化
+│       └── NettyServerInitializer.java     # Netty服务器初始化
+└── pom.xml
+```
+
+## 使用方式
+
+### 主入口点
+```java
+// 原来的启动方式
+public static void main(String[] args) {
+    SpringApplication.run(Manager.class, args);
+}
+
+// 现在的启动方式
+public static void main(String[] args) {
+    SpringApplication.run(HertzBeatApplication.class, args);
+}
+```
+
+### 启动顺序
+1. `HertzBeatApplication` 作为主启动类启动Spring Boot应用
+2. `SystemConfigInitializer` (最高优先级 +2) 初始化系统配置
+3. `SchedulerSystemInitializer` (最低优先级 -1) 初始化调度系统
+4. `NettyServerInitializer` (最低优先级) 启动Netty服务器
+
+## 迁移说明
+
+### 从 Manager 模块迁移的组件
+1. **启动主类** - `Manager.java` → `HertzBeatApplication.java`
+2. **配置初始化** - `ConfigInitializer.java` → `SystemConfigInitializer.java`
+3. **调度初始化** - `SchedulerInit.java` → `SchedulerSystemInitializer.java`
+4. **Netty服务器** - `ManageServer.java` → `NettyServerInitializer.java`
+
+### Manager 模块的变化
+- 移除了所有启动相关的代码
+- 保留 `Manager.java` 作为 Spring Boot 配置类
+- 专注于业务逻辑处理
+
+## 资源文件迁移
+
+### 迁移到 startup 模块的资源
+- **应用配置文件** - `application*.yml`(包含dev、test、mysql、pg等配置)
+- **数据库迁移脚本** - `db/migration/`(支持H2、MySQL、PostgreSQL)
+- **启动横幅** - `banner.txt`
+- **安全配置** - `sureness.yml`
+
+### 保留在 manager 模块的资源
+- **监控应用定义** - `define/app-*.yml`(各种监控应用的定义文件)
+- **告警模板** - `templates/`(告警通知模板文件)
+
+## 依赖关系
+
+### 当前依赖
+- `spring-boot-starter` - Spring Boot核心
+- `spring-boot-starter-web` - Web应用支持
+- `spring-boot-starter-data-jpa` - 数据持久化
+- `flyway-core` - 数据库迁移核心
+- `flyway-mysql` - MySQL数据库迁移支持
+- `flyway-database-postgresql` - PostgreSQL数据库迁移支持
+- `h2database` - H2数据库(默认)
+- `hertzbeat-common` - 通用组件
+- `hertzbeat-base` - 基础组件
+- `hertzbeat-warehouse` - 数据仓库
+- `hertzbeat-alerter` - 告警模块
+- `hertzbeat-remoting` - 远程通信
+- `hertzbeat-manager` - 管理模块(业务逻辑)
+
+### 注意事项
+由于启动模块需要访问管理模块的服务和配置,存在对 `hertzbeat-manager` 的依赖。在实际部署时,需要确保依赖的正确性。
+
+## 配置属性
+
+### 系统配置相关
+- `sureness.jwt.secret` - JWT密钥配置
+- `common.secret` - AES密钥配置
+
+### 调度器相关
+- `scheduler.server.enabled` - 是否启用Netty服务器
+- `scheduler.server.port` - Netty服务器端口
+- `scheduler.server.idleStateEventTriggerTime` - 空闲状态触发时间
+
+## 优势
+
+1. **职责分离** - 启动逻辑与业务逻辑分离,模块职责更加清晰
+2. **易于维护** - 所有启动相关代码集中在一个模块中
+3. **可扩展性** - 新的启动功能可以轻松添加到启动模块
+4. **向后兼容** - 保持了原有的配置和功能不变
+
+## 注意事项
+
+1. **依赖管理** - 需要正确处理启动模块与业务模块之间的依赖关系
+2. **启动顺序** - 确保各个初始化组件按照正确的顺序执行
+3. **配置传递** - 启动模块需要能够访问业务模块的配置和服务
+4. **测试验证** - 重构后需要充分测试启动流程的正确性
+
+## 总结
+
+通过创建 `hertzbeat-startup` 模块,我们成功地将启动职责从业务模块中分离出来,实现了更清晰的模块划分。这种设计使得:
+
+- 启动逻辑更加集中和易于维护
+- 业务模块可以专注于业务逻辑
+- 整体架构更加模块化和可扩展
+- 保持了原有功能的完整性和稳定性
+
+这是一个典型的关注点分离重构实践,提高了代码的可维护性和可扩展性。
\ No newline at end of file
diff --git a/hertzbeat-manager/pom.xml b/hertzbeat-startup/pom.xml
similarity index 73%
copy from hertzbeat-manager/pom.xml
copy to hertzbeat-startup/pom.xml
index 6140b34d7..1781f4835 100644
--- a/hertzbeat-manager/pom.xml
+++ b/hertzbeat-startup/pom.xml
@@ -15,132 +15,104 @@
   ~ See the License for the specific language governing permissions and
   ~ limitations under the License.
   -->
-<project xmlns="http://maven.apache.org/POM/4.0.0"; 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
+<project xmlns="http://maven.apache.org/POM/4.0.0";
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
http://maven.apache.org/xsd/maven-4.0.0.xsd";>
+    <modelVersion>4.0.0</modelVersion>
+
     <parent>
-        <artifactId>hertzbeat</artifactId>
         <groupId>org.apache.hertzbeat</groupId>
+        <artifactId>hertzbeat</artifactId>
         <version>2.0-SNAPSHOT</version>
     </parent>
-    <modelVersion>4.0.0</modelVersion>
-    <artifactId>hertzbeat-manager</artifactId>
-    <name>${project.artifactId}</name>
+
+    <artifactId>hertzbeat-startup</artifactId>
     <packaging>jar</packaging>
 
-    <properties>
-        <maven.install.skip>true</maven.install.skip>
-    </properties>
+    <name>hertzbeat-startup</name>
+    <description>Apache HertzBeat startup module</description>
 
     <dependencies>
-        <!-- common -->
-        <dependency>
-            <groupId>org.apache.hertzbeat</groupId>
-            <artifactId>hertzbeat-common</artifactId>
-            <exclusions>
-                <exclusion>
-                    <artifactId>commons-logging</artifactId>
-                    <groupId>commons-logging</groupId>
-                </exclusion>
-            </exclusions>
-        </dependency>
-        <!-- base -->
-        <dependency>
-            <groupId>org.apache.hertzbeat</groupId>
-            <artifactId>hertzbeat-base</artifactId>
-        </dependency>
-        <!-- data warehouse -->
+        <!-- Spring Boot Starter -->
         <dependency>
-            <groupId>org.apache.hertzbeat</groupId>
-            <artifactId>hertzbeat-warehouse</artifactId>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter</artifactId>
         </dependency>
-        <!-- alerter -->
+
+        <!-- Spring Boot JPA -->
         <dependency>
-            <groupId>org.apache.hertzbeat</groupId>
-            <artifactId>hertzbeat-alerter</artifactId>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-data-jpa</artifactId>
         </dependency>
-        <!-- collector -->
+
+        <!-- Spring Boot Web -->
         <dependency>
-            <groupId>org.apache.hertzbeat</groupId>
-            <artifactId>hertzbeat-collector-collector</artifactId>
-            <exclusions>
-                <exclusion>
-                    <artifactId>commons-logging</artifactId>
-                    <groupId>commons-logging</groupId>
-                </exclusion>
-            </exclusions>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-web</artifactId>
         </dependency>
-        <!-- remoting -->
+
+        <!-- HertzBeat manager -->
         <dependency>
             <groupId>org.apache.hertzbeat</groupId>
-            <artifactId>hertzbeat-remoting</artifactId>
+            <artifactId>hertzbeat-manager</artifactId>
         </dependency>
-        <!-- push -->
+        
+        <!-- HertzBeat common -->
         <dependency>
             <groupId>org.apache.hertzbeat</groupId>
-            <artifactId>hertzbeat-push</artifactId>
+            <artifactId>hertzbeat-common</artifactId>
         </dependency>
-        <!-- plugin -->
+
+        <!-- HertzBeat base -->
         <dependency>
             <groupId>org.apache.hertzbeat</groupId>
-            <artifactId>hertzbeat-plugin</artifactId>
+            <artifactId>hertzbeat-base</artifactId>
         </dependency>
-        <!-- grafana -->
+
+        <!-- HertzBeat warehouse -->
         <dependency>
             <groupId>org.apache.hertzbeat</groupId>
-            <artifactId>hertzbeat-grafana</artifactId>
+            <artifactId>hertzbeat-warehouse</artifactId>
         </dependency>
-        <!-- log otel -->
+
+        <!-- HertzBeat alerter -->
         <dependency>
             <groupId>org.apache.hertzbeat</groupId>
-            <artifactId>hertzbeat-otel</artifactId>
+            <artifactId>hertzbeat-alerter</artifactId>
         </dependency>
-        <!-- log -->
+
+        <!-- HertzBeat remoting -->
         <dependency>
             <groupId>org.apache.hertzbeat</groupId>
-            <artifactId>hertzbeat-log</artifactId>
-        </dependency>
-        <!-- spring -->
-        <dependency>
-            <groupId>org.springframework.boot</groupId>
-            <artifactId>spring-boot-starter-web</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.springframework.boot</groupId>
-            <artifactId>spring-boot-configuration-processor</artifactId>
-            <optional>true</optional>
-        </dependency>
-        <dependency>
-            <groupId>org.springframework.boot</groupId>
-            <artifactId>spring-boot-starter-actuator</artifactId>
-        </dependency>
-        <!--thymeleaf-->
-        <dependency>
-            <groupId>org.springframework.boot</groupId>
-            <artifactId>spring-boot-starter-thymeleaf</artifactId>
+            <artifactId>hertzbeat-remoting</artifactId>
         </dependency>
 
-        <!--webflux-->
+        
+        <!-- Jackson -->
         <dependency>
-            <groupId>org.springframework.boot</groupId>
-            <artifactId>spring-boot-starter-webflux</artifactId>
+            <groupId>com.fasterxml.jackson.core</groupId>
+            <artifactId>jackson-databind</artifactId>
         </dependency>
 
-        <!--   freemarker     -->
+        <!-- Commons Lang3 -->
         <dependency>
-            <groupId>org.springframework.boot</groupId>
-            <artifactId>spring-boot-starter-freemarker</artifactId>
+            <groupId>org.apache.commons</groupId>
+            <artifactId>commons-lang3</artifactId>
         </dependency>
+
+        <!-- Sureness for security -->
         <dependency>
-            <groupId>net.sourceforge.nekohtml</groupId>
-            <artifactId>nekohtml</artifactId>
-            <version>${nekohtml.version}</version>
+            <groupId>com.usthe.sureness</groupId>
+            <artifactId>spring-boot3-starter-sureness</artifactId>
         </dependency>
-        <!-- data jdbc -->
+
+        <!-- Netty -->
         <dependency>
-            <groupId>org.springframework.boot</groupId>
-            <artifactId>spring-boot-starter-jdbc</artifactId>
+            <groupId>io.netty</groupId>
+            <artifactId>netty-all</artifactId>
         </dependency>
-        <!-- database migration -->
+
+        <!-- Database Migration - Flyway -->
         <dependency>
             <groupId>org.flywaydb</groupId>
             <artifactId>flyway-core</artifactId>
@@ -153,76 +125,26 @@
             <groupId>org.flywaydb</groupId>
             <artifactId>flyway-database-postgresql</artifactId>
         </dependency>
-        <!-- mysql -->
-        <dependency>
-            <groupId>com.mysql</groupId>
-            <artifactId>mysql-connector-j</artifactId>
-            <scope>provided</scope>
-        </dependency>
-        <!-- email -->
-        <dependency>
-            <groupId>org.springframework.boot</groupId>
-            <artifactId>spring-boot-starter-mail</artifactId>
-        </dependency>
-        <!-- swagger -->
-        <dependency>
-            <groupId>org.springdoc</groupId>
-            <artifactId>springdoc-openapi-starter-webmvc-ui</artifactId>
-        </dependency>
-        <!-- yaml file load -->
-        <dependency>
-            <groupId>org.yaml</groupId>
-            <artifactId>snakeyaml</artifactId>
-        </dependency>
-        <!--sureness-->
-        <dependency>
-            <groupId>com.usthe.sureness</groupId>
-            <artifactId>spring-boot3-starter-sureness</artifactId>
-        </dependency>
-        <!-- okhttp -->
-        <dependency>
-            <groupId>com.squareup.okhttp3</groupId>
-            <artifactId>okhttp</artifactId>
-        </dependency>
-        <!-- h2 database-->
+
+        <!-- H2 Database (default) -->
         <dependency>
             <groupId>com.h2database</groupId>
             <artifactId>h2</artifactId>
             <scope>runtime</scope>
         </dependency>
-        <dependency>
-            <groupId>cn.afterturn</groupId>
-            <artifactId>easypoi-spring-boot-starter</artifactId>
-            <version>${easy-poi.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>com.huaweicloud</groupId>
-            <artifactId>esdk-obs-java</artifactId>
-            <version>${huawei.obs.version}</version>
-            <exclusions>
-                <exclusion>
-                    <groupId>org.openeuler</groupId>
-                    <artifactId>bgmprovider</artifactId>
-                </exclusion>
-            </exclusions>
-        </dependency>
 
+        <!-- Lombok -->
         <dependency>
-            <groupId>org.apache.arrow</groupId>
-            <artifactId>arrow-vector</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.arrow</groupId>
-            <artifactId>arrow-memory-netty</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.hertzbeat</groupId>
-            <artifactId>hertzbeat-ai-agent</artifactId>
-            <version>${project.version}</version>
+            <groupId>org.projectlombok</groupId>
+            <artifactId>lombok</artifactId>
+            <scope>provided</scope>
         </dependency>
+
+        <!-- Test dependencies -->
         <dependency>
-            <groupId>io.micrometer</groupId>
-            <artifactId>micrometer-registry-prometheus</artifactId>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-test</artifactId>
+            <scope>test</scope>
         </dependency>
     </dependencies>
 
@@ -256,7 +178,7 @@
                         <addMavenDescriptor>false</addMavenDescriptor>
                         <manifest>
                             <!--Main class of the project-->
-                            
<mainClass>org.apache.hertzbeat.manager.Manager</mainClass>
+                            
<mainClass>org.apache.hertzbeat.startup.HertzBeatApplication</mainClass>
                             <useUniqueVersions>false</useUniqueVersions>
                             <!--Add third-party JARs to the classpath using 
maven-dependency-plugin-->
                             <addClasspath>true</addClasspath>
diff --git 
a/hertzbeat-manager/src/main/java/org/apache/hertzbeat/manager/Manager.java 
b/hertzbeat-startup/src/main/java/org/apache/hertzbeat/startup/HertzBeatApplication.java
similarity index 86%
rename from 
hertzbeat-manager/src/main/java/org/apache/hertzbeat/manager/Manager.java
rename to 
hertzbeat-startup/src/main/java/org/apache/hertzbeat/startup/HertzBeatApplication.java
index addb281ce..f06741ef4 100644
--- a/hertzbeat-manager/src/main/java/org/apache/hertzbeat/manager/Manager.java
+++ 
b/hertzbeat-startup/src/main/java/org/apache/hertzbeat/startup/HertzBeatApplication.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.hertzbeat.manager;
+package org.apache.hertzbeat.startup;
 
 import javax.annotation.PostConstruct;
 import org.apache.hertzbeat.manager.nativex.HertzbeatRuntimeHintsRegistrar;
@@ -31,9 +31,9 @@ import org.springframework.scheduling.annotation.EnableAsync;
 import org.springframework.scheduling.annotation.EnableScheduling;
 
 /**
- * start up class.
+ * HertzBeat main application startup class.
+ * This class replaces the original Manager class as the main entry point for 
HertzBeat application.
  */
-
 @SpringBootApplication
 @EnableJpaAuditing
 @EnableJpaRepositories(basePackages = {"org.apache.hertzbeat"})
@@ -43,13 +43,15 @@ import 
org.springframework.scheduling.annotation.EnableScheduling;
 @ImportRuntimeHints(HertzbeatRuntimeHintsRegistrar.class)
 @EnableAsync
 @EnableScheduling
-public class Manager {
+public class HertzBeatApplication {
+
     public static void main(String[] args) {
-        SpringApplication.run(Manager.class, args);
+        SpringApplication.run(HertzBeatApplication.class, args);
     }
 
     @PostConstruct
     public void init() {
+        // Set JNDI object factory filter for security
         System.setProperty("jdk.jndi.object.factoriesFilter", 
"!com.zaxxer.hikari.HikariJNDIFactory");
     }
-}
\ No newline at end of file
+}
diff --git a/hertzbeat-manager/src/main/resources/application-test.yml 
b/hertzbeat-startup/src/main/resources/application-test.yml
similarity index 100%
rename from hertzbeat-manager/src/main/resources/application-test.yml
rename to hertzbeat-startup/src/main/resources/application-test.yml
diff --git a/hertzbeat-manager/src/main/resources/application.yml 
b/hertzbeat-startup/src/main/resources/application.yml
similarity index 100%
rename from hertzbeat-manager/src/main/resources/application.yml
rename to hertzbeat-startup/src/main/resources/application.yml
diff --git a/hertzbeat-manager/src/main/resources/banner.txt 
b/hertzbeat-startup/src/main/resources/banner.txt
similarity index 100%
rename from hertzbeat-manager/src/main/resources/banner.txt
rename to hertzbeat-startup/src/main/resources/banner.txt
diff --git 
a/hertzbeat-manager/src/main/resources/db/migration/h2/V160__update_column.sql 
b/hertzbeat-startup/src/main/resources/db/migration/h2/V160__update_column.sql
similarity index 100%
rename from 
hertzbeat-manager/src/main/resources/db/migration/h2/V160__update_column.sql
rename to 
hertzbeat-startup/src/main/resources/db/migration/h2/V160__update_column.sql
diff --git 
a/hertzbeat-manager/src/main/resources/db/migration/h2/V170__update_column.sql 
b/hertzbeat-startup/src/main/resources/db/migration/h2/V170__update_column.sql
similarity index 100%
rename from 
hertzbeat-manager/src/main/resources/db/migration/h2/V170__update_column.sql
rename to 
hertzbeat-startup/src/main/resources/db/migration/h2/V170__update_column.sql
diff --git 
a/hertzbeat-manager/src/main/resources/db/migration/h2/V172__update_column.sql 
b/hertzbeat-startup/src/main/resources/db/migration/h2/V172__update_column.sql
similarity index 100%
rename from 
hertzbeat-manager/src/main/resources/db/migration/h2/V172__update_column.sql
rename to 
hertzbeat-startup/src/main/resources/db/migration/h2/V172__update_column.sql
diff --git 
a/hertzbeat-manager/src/main/resources/db/migration/h2/V173__update_column.sql 
b/hertzbeat-startup/src/main/resources/db/migration/h2/V173__update_column.sql
similarity index 100%
rename from 
hertzbeat-manager/src/main/resources/db/migration/h2/V173__update_column.sql
rename to 
hertzbeat-startup/src/main/resources/db/migration/h2/V173__update_column.sql
diff --git 
a/hertzbeat-manager/src/main/resources/db/migration/h2/V180__update_column.sql 
b/hertzbeat-startup/src/main/resources/db/migration/h2/V180__update_column.sql
similarity index 100%
rename from 
hertzbeat-manager/src/main/resources/db/migration/h2/V180__update_column.sql
rename to 
hertzbeat-startup/src/main/resources/db/migration/h2/V180__update_column.sql
diff --git 
a/hertzbeat-manager/src/main/resources/db/migration/mysql/V160__update_column.sql
 
b/hertzbeat-startup/src/main/resources/db/migration/mysql/V160__update_column.sql
similarity index 100%
rename from 
hertzbeat-manager/src/main/resources/db/migration/mysql/V160__update_column.sql
rename to 
hertzbeat-startup/src/main/resources/db/migration/mysql/V160__update_column.sql
diff --git 
a/hertzbeat-manager/src/main/resources/db/migration/mysql/V170__update_column.sql
 
b/hertzbeat-startup/src/main/resources/db/migration/mysql/V170__update_column.sql
similarity index 100%
rename from 
hertzbeat-manager/src/main/resources/db/migration/mysql/V170__update_column.sql
rename to 
hertzbeat-startup/src/main/resources/db/migration/mysql/V170__update_column.sql
diff --git 
a/hertzbeat-manager/src/main/resources/db/migration/mysql/V172__update_column.sql
 
b/hertzbeat-startup/src/main/resources/db/migration/mysql/V172__update_column.sql
similarity index 100%
rename from 
hertzbeat-manager/src/main/resources/db/migration/mysql/V172__update_column.sql
rename to 
hertzbeat-startup/src/main/resources/db/migration/mysql/V172__update_column.sql
diff --git 
a/hertzbeat-manager/src/main/resources/db/migration/mysql/V173__update_column.sql
 
b/hertzbeat-startup/src/main/resources/db/migration/mysql/V173__update_column.sql
similarity index 100%
rename from 
hertzbeat-manager/src/main/resources/db/migration/mysql/V173__update_column.sql
rename to 
hertzbeat-startup/src/main/resources/db/migration/mysql/V173__update_column.sql
diff --git 
a/hertzbeat-manager/src/main/resources/db/migration/mysql/V180__update_column.sql
 
b/hertzbeat-startup/src/main/resources/db/migration/mysql/V180__update_column.sql
similarity index 100%
rename from 
hertzbeat-manager/src/main/resources/db/migration/mysql/V180__update_column.sql
rename to 
hertzbeat-startup/src/main/resources/db/migration/mysql/V180__update_column.sql
diff --git 
a/hertzbeat-manager/src/main/resources/db/migration/postgresql/V160__update_column.sql
 
b/hertzbeat-startup/src/main/resources/db/migration/postgresql/V160__update_column.sql
similarity index 100%
rename from 
hertzbeat-manager/src/main/resources/db/migration/postgresql/V160__update_column.sql
rename to 
hertzbeat-startup/src/main/resources/db/migration/postgresql/V160__update_column.sql
diff --git 
a/hertzbeat-manager/src/main/resources/db/migration/postgresql/V170__update_column.sql
 
b/hertzbeat-startup/src/main/resources/db/migration/postgresql/V170__update_column.sql
similarity index 100%
rename from 
hertzbeat-manager/src/main/resources/db/migration/postgresql/V170__update_column.sql
rename to 
hertzbeat-startup/src/main/resources/db/migration/postgresql/V170__update_column.sql
diff --git 
a/hertzbeat-manager/src/main/resources/db/migration/postgresql/V172__update_column.sql
 
b/hertzbeat-startup/src/main/resources/db/migration/postgresql/V172__update_column.sql
similarity index 100%
rename from 
hertzbeat-manager/src/main/resources/db/migration/postgresql/V172__update_column.sql
rename to 
hertzbeat-startup/src/main/resources/db/migration/postgresql/V172__update_column.sql
diff --git 
a/hertzbeat-manager/src/main/resources/db/migration/postgresql/V173__update_column.sql
 
b/hertzbeat-startup/src/main/resources/db/migration/postgresql/V173__update_column.sql
similarity index 100%
rename from 
hertzbeat-manager/src/main/resources/db/migration/postgresql/V173__update_column.sql
rename to 
hertzbeat-startup/src/main/resources/db/migration/postgresql/V173__update_column.sql
diff --git 
a/hertzbeat-manager/src/main/resources/db/migration/postgresql/V180__update_column.sql
 
b/hertzbeat-startup/src/main/resources/db/migration/postgresql/V180__update_column.sql
similarity index 100%
rename from 
hertzbeat-manager/src/main/resources/db/migration/postgresql/V180__update_column.sql
rename to 
hertzbeat-startup/src/main/resources/db/migration/postgresql/V180__update_column.sql
diff --git a/hertzbeat-manager/src/main/resources/logback-spring.xml 
b/hertzbeat-startup/src/main/resources/logback-spring.xml
similarity index 100%
rename from hertzbeat-manager/src/main/resources/logback-spring.xml
rename to hertzbeat-startup/src/main/resources/logback-spring.xml
diff --git a/hertzbeat-manager/src/main/resources/sureness.yml 
b/hertzbeat-startup/src/main/resources/sureness.yml
similarity index 100%
rename from hertzbeat-manager/src/main/resources/sureness.yml
rename to hertzbeat-startup/src/main/resources/sureness.yml
diff --git 
a/hertzbeat-manager/src/test/java/org/apache/hertzbeat/manager/AbstractSpringIntegrationTest.java
 
b/hertzbeat-startup/src/test/java/org/apache/hertzbeat/startup/AbstractSpringIntegrationTest.java
similarity index 87%
rename from 
hertzbeat-manager/src/test/java/org/apache/hertzbeat/manager/AbstractSpringIntegrationTest.java
rename to 
hertzbeat-startup/src/test/java/org/apache/hertzbeat/startup/AbstractSpringIntegrationTest.java
index e22c4a0d1..0c2e9f571 100644
--- 
a/hertzbeat-manager/src/test/java/org/apache/hertzbeat/manager/AbstractSpringIntegrationTest.java
+++ 
b/hertzbeat-startup/src/test/java/org/apache/hertzbeat/startup/AbstractSpringIntegrationTest.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.hertzbeat.manager;
+package org.apache.hertzbeat.startup;
 
 import org.springframework.boot.test.context.SpringBootTest;
 import org.springframework.test.context.ActiveProfiles;
@@ -24,7 +24,7 @@ import org.springframework.test.context.ActiveProfiles;
  * Abstract Integration Test for Spring.
  */
 @ActiveProfiles("test")
-@SpringBootTest(classes = Manager.class, webEnvironment = 
SpringBootTest.WebEnvironment.RANDOM_PORT)
+@SpringBootTest(classes = HertzBeatApplication.class, webEnvironment = 
SpringBootTest.WebEnvironment.RANDOM_PORT)
 public class AbstractSpringIntegrationTest {
 
 }
diff --git 
a/hertzbeat-manager/src/test/java/org/apache/hertzbeat/manager/ManagerTest.java 
b/hertzbeat-startup/src/test/java/org/apache/hertzbeat/startup/ContextTest.java
similarity index 92%
rename from 
hertzbeat-manager/src/test/java/org/apache/hertzbeat/manager/ManagerTest.java
rename to 
hertzbeat-startup/src/test/java/org/apache/hertzbeat/startup/ContextTest.java
index 9c1858fb2..bc00a05c1 100644
--- 
a/hertzbeat-manager/src/test/java/org/apache/hertzbeat/manager/ManagerTest.java
+++ 
b/hertzbeat-startup/src/test/java/org/apache/hertzbeat/startup/ContextTest.java
@@ -15,12 +15,11 @@
  * limitations under the License.
  */
 
-package org.apache.hertzbeat.manager;
+package org.apache.hertzbeat.startup;
 
 import static org.junit.jupiter.api.Assertions.assertNotNull;
 import static org.junit.jupiter.api.Assertions.assertThrows;
 import javax.annotation.Resource;
-import javax.naming.NamingException;
 import org.apache.hertzbeat.alert.AlerterProperties;
 import org.apache.hertzbeat.alert.AlerterWorkerPool;
 import 
org.apache.hertzbeat.alert.calculate.realtime.MetricsRealTimeAlertCalculator;
@@ -59,7 +58,7 @@ import org.springframework.context.ApplicationContext;
  *
  * @version 2.1
  */
-class ManagerTest extends AbstractSpringIntegrationTest {
+class ContextTest extends AbstractSpringIntegrationTest {
 
     @Resource
     private ApplicationContext ctx;
@@ -107,13 +106,5 @@ class ManagerTest extends AbstractSpringIntegrationTest {
 
         assertNotNull(ctx.getBean(MetricsDataController.class));
     }
-
-    @Test
-    void testJndi() throws NamingException {
-        //System.setProperty("jdk.jndi.object.factoriesFilter", 
"!com.zaxxer.hikari.HikariJNDIFactory");
-        // for CI
-        //InitialContext initialContext = new InitialContext();
-        //initialContext.lookup("rmi://localhost:1099/Exploit");
-    }
-
+    
 }
diff --git 
a/hertzbeat-manager/src/test/java/org/apache/hertzbeat/manager/dao/CollectorDaoTest.java
 
b/hertzbeat-startup/src/test/java/org/apache/hertzbeat/startup/dao/CollectorDaoTest.java
similarity index 93%
rename from 
hertzbeat-manager/src/test/java/org/apache/hertzbeat/manager/dao/CollectorDaoTest.java
rename to 
hertzbeat-startup/src/test/java/org/apache/hertzbeat/startup/dao/CollectorDaoTest.java
index 997ebeaa5..9d4ea3403 100644
--- 
a/hertzbeat-manager/src/test/java/org/apache/hertzbeat/manager/dao/CollectorDaoTest.java
+++ 
b/hertzbeat-startup/src/test/java/org/apache/hertzbeat/startup/dao/CollectorDaoTest.java
@@ -15,14 +15,15 @@
  * limitations under the License.
  */
 
-package org.apache.hertzbeat.manager.dao;
+package org.apache.hertzbeat.startup.dao;
 
 import static org.junit.jupiter.api.Assertions.assertNotNull;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 import static org.junit.jupiter.api.Assertions.assertFalse;
 import javax.annotation.Resource;
 import org.apache.hertzbeat.common.entity.manager.Collector;
-import org.apache.hertzbeat.manager.AbstractSpringIntegrationTest;
+import org.apache.hertzbeat.manager.dao.CollectorDao;
+import org.apache.hertzbeat.startup.AbstractSpringIntegrationTest;
 import org.junit.jupiter.api.AfterEach;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
diff --git 
a/hertzbeat-manager/src/test/java/org/apache/hertzbeat/manager/dao/LabelDaoTest.java
 
b/hertzbeat-startup/src/test/java/org/apache/hertzbeat/startup/dao/LabelDaoTest.java
similarity index 94%
rename from 
hertzbeat-manager/src/test/java/org/apache/hertzbeat/manager/dao/LabelDaoTest.java
rename to 
hertzbeat-startup/src/test/java/org/apache/hertzbeat/startup/dao/LabelDaoTest.java
index ccd312642..9c57ad3f3 100644
--- 
a/hertzbeat-manager/src/test/java/org/apache/hertzbeat/manager/dao/LabelDaoTest.java
+++ 
b/hertzbeat-startup/src/test/java/org/apache/hertzbeat/startup/dao/LabelDaoTest.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.hertzbeat.manager.dao;
+package org.apache.hertzbeat.startup.dao;
 
 import static org.junit.jupiter.api.Assertions.assertDoesNotThrow;
 import static org.junit.jupiter.api.Assertions.assertFalse;
@@ -27,7 +27,8 @@ import java.util.List;
 import java.util.Set;
 import java.util.stream.Collectors;
 import org.apache.hertzbeat.common.entity.manager.Label;
-import org.apache.hertzbeat.manager.AbstractSpringIntegrationTest;
+import org.apache.hertzbeat.manager.dao.LabelDao;
+import org.apache.hertzbeat.startup.AbstractSpringIntegrationTest;
 import org.junit.jupiter.api.AfterEach;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
diff --git 
a/hertzbeat-manager/src/test/java/org/apache/hertzbeat/manager/dao/MetricsFavoriteDaoTest.java
 
b/hertzbeat-startup/src/test/java/org/apache/hertzbeat/startup/dao/MetricsFavoriteDaoTest.java
similarity index 98%
rename from 
hertzbeat-manager/src/test/java/org/apache/hertzbeat/manager/dao/MetricsFavoriteDaoTest.java
rename to 
hertzbeat-startup/src/test/java/org/apache/hertzbeat/startup/dao/MetricsFavoriteDaoTest.java
index c9a1b3beb..ec7857341 100644
--- 
a/hertzbeat-manager/src/test/java/org/apache/hertzbeat/manager/dao/MetricsFavoriteDaoTest.java
+++ 
b/hertzbeat-startup/src/test/java/org/apache/hertzbeat/startup/dao/MetricsFavoriteDaoTest.java
@@ -15,11 +15,12 @@
  * limitations under the License.
  */
 
-package org.apache.hertzbeat.manager.dao;
+package org.apache.hertzbeat.startup.dao;
 
 import jakarta.annotation.Resource;
 import org.apache.hertzbeat.common.entity.manager.MetricsFavorite;
-import org.apache.hertzbeat.manager.AbstractSpringIntegrationTest;
+import org.apache.hertzbeat.manager.dao.MetricsFavoriteDao;
+import org.apache.hertzbeat.startup.AbstractSpringIntegrationTest;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 import org.springframework.test.annotation.DirtiesContext;
@@ -206,4 +207,4 @@ class MetricsFavoriteDaoTest extends 
AbstractSpringIntegrationTest {
             metricsFavoriteDao.saveAndFlush(duplicate);
         });
     }
-}
\ No newline at end of file
+}
diff --git 
a/hertzbeat-manager/src/test/java/org/apache/hertzbeat/manager/dao/MonitorDaoTest.java
 
b/hertzbeat-startup/src/test/java/org/apache/hertzbeat/startup/dao/MonitorDaoTest.java
similarity index 96%
rename from 
hertzbeat-manager/src/test/java/org/apache/hertzbeat/manager/dao/MonitorDaoTest.java
rename to 
hertzbeat-startup/src/test/java/org/apache/hertzbeat/startup/dao/MonitorDaoTest.java
index 844d32bf8..ef9612ea6 100644
--- 
a/hertzbeat-manager/src/test/java/org/apache/hertzbeat/manager/dao/MonitorDaoTest.java
+++ 
b/hertzbeat-startup/src/test/java/org/apache/hertzbeat/startup/dao/MonitorDaoTest.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.hertzbeat.manager.dao;
+package org.apache.hertzbeat.startup.dao;
 
 import static org.junit.jupiter.api.Assertions.assertDoesNotThrow;
 import static org.junit.jupiter.api.Assertions.assertEquals;
@@ -29,8 +29,9 @@ import java.util.List;
 import java.util.Optional;
 import java.util.Set;
 import org.apache.hertzbeat.common.entity.manager.Monitor;
-import org.apache.hertzbeat.manager.AbstractSpringIntegrationTest;
+import org.apache.hertzbeat.manager.dao.MonitorDao;
 import org.apache.hertzbeat.manager.pojo.dto.AppCount;
+import org.apache.hertzbeat.startup.AbstractSpringIntegrationTest;
 import org.junit.jupiter.api.AfterEach;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
diff --git 
a/hertzbeat-manager/src/test/java/org/apache/hertzbeat/manager/dao/NoticeRuleDaoTest.java
 
b/hertzbeat-startup/src/test/java/org/apache/hertzbeat/startup/dao/NoticeRuleDaoTest.java
similarity index 96%
rename from 
hertzbeat-manager/src/test/java/org/apache/hertzbeat/manager/dao/NoticeRuleDaoTest.java
rename to 
hertzbeat-startup/src/test/java/org/apache/hertzbeat/startup/dao/NoticeRuleDaoTest.java
index fbda372ab..a47195868 100644
--- 
a/hertzbeat-manager/src/test/java/org/apache/hertzbeat/manager/dao/NoticeRuleDaoTest.java
+++ 
b/hertzbeat-startup/src/test/java/org/apache/hertzbeat/startup/dao/NoticeRuleDaoTest.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.hertzbeat.manager.dao;
+package org.apache.hertzbeat.startup.dao;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertNotNull;
@@ -24,7 +24,7 @@ import java.time.LocalDateTime;
 import java.util.List;
 import org.apache.hertzbeat.alert.dao.NoticeRuleDao;
 import org.apache.hertzbeat.common.entity.alerter.NoticeRule;
-import org.apache.hertzbeat.manager.AbstractSpringIntegrationTest;
+import org.apache.hertzbeat.startup.AbstractSpringIntegrationTest;
 import org.junit.jupiter.api.AfterEach;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
diff --git 
a/hertzbeat-manager/src/test/java/org/apache/hertzbeat/manager/dao/ParamDaoTest.java
 
b/hertzbeat-startup/src/test/java/org/apache/hertzbeat/startup/dao/ParamDaoTest.java
similarity index 95%
rename from 
hertzbeat-manager/src/test/java/org/apache/hertzbeat/manager/dao/ParamDaoTest.java
rename to 
hertzbeat-startup/src/test/java/org/apache/hertzbeat/startup/dao/ParamDaoTest.java
index b379b866a..6580af71f 100644
--- 
a/hertzbeat-manager/src/test/java/org/apache/hertzbeat/manager/dao/ParamDaoTest.java
+++ 
b/hertzbeat-startup/src/test/java/org/apache/hertzbeat/startup/dao/ParamDaoTest.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.hertzbeat.manager.dao;
+package org.apache.hertzbeat.startup.dao;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertNotNull;
@@ -25,7 +25,8 @@ import java.util.HashSet;
 import java.util.List;
 import java.util.Set;
 import org.apache.hertzbeat.common.entity.manager.Param;
-import org.apache.hertzbeat.manager.AbstractSpringIntegrationTest;
+import org.apache.hertzbeat.manager.dao.ParamDao;
+import org.apache.hertzbeat.startup.AbstractSpringIntegrationTest;
 import org.junit.jupiter.api.AfterEach;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
diff --git 
a/hertzbeat-manager/src/test/java/org/apache/hertzbeat/manager/dao/ParamDefineDaoTest.java
 
b/hertzbeat-startup/src/test/java/org/apache/hertzbeat/startup/dao/ParamDefineDaoTest.java
similarity index 94%
rename from 
hertzbeat-manager/src/test/java/org/apache/hertzbeat/manager/dao/ParamDefineDaoTest.java
rename to 
hertzbeat-startup/src/test/java/org/apache/hertzbeat/startup/dao/ParamDefineDaoTest.java
index 6fe0eeaaa..1d836878b 100644
--- 
a/hertzbeat-manager/src/test/java/org/apache/hertzbeat/manager/dao/ParamDefineDaoTest.java
+++ 
b/hertzbeat-startup/src/test/java/org/apache/hertzbeat/startup/dao/ParamDefineDaoTest.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.hertzbeat.manager.dao;
+package org.apache.hertzbeat.startup.dao;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertNotNull;
@@ -24,7 +24,8 @@ import java.util.Collections;
 import java.util.HashMap;
 import java.util.List;
 import org.apache.hertzbeat.common.entity.manager.ParamDefine;
-import org.apache.hertzbeat.manager.AbstractSpringIntegrationTest;
+import org.apache.hertzbeat.manager.dao.ParamDefineDao;
+import org.apache.hertzbeat.startup.AbstractSpringIntegrationTest;
 import org.junit.jupiter.api.AfterEach;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
diff --git a/mcp-servers/README.md b/mcp-servers/README.md
index b31465b5a..1020ede66 100644
--- a/mcp-servers/README.md
+++ b/mcp-servers/README.md
@@ -10,4 +10,6 @@ script in the machine running this server.
 
 Use a simple Oauth2.0 for authentication.
 
+## mcp-log-server
 
+This mcp server provide the ability to query log from greptime db.
diff --git a/hertzbeat-mcp/README.md b/mcp-servers/mcp-log-server/README.md
similarity index 100%
rename from hertzbeat-mcp/README.md
rename to mcp-servers/mcp-log-server/README.md
diff --git a/hertzbeat-mcp/pom.xml b/mcp-servers/mcp-log-server/pom.xml
similarity index 100%
rename from hertzbeat-mcp/pom.xml
rename to mcp-servers/mcp-log-server/pom.xml
diff --git 
a/hertzbeat-mcp/src/main/java/org/apache/hertzbeat/mcp/server/McpServerApplication.java
 
b/mcp-servers/mcp-log-server/src/main/java/org/apache/hertzbeat/mcp/log/server/McpServerApplication.java
similarity index 100%
rename from 
hertzbeat-mcp/src/main/java/org/apache/hertzbeat/mcp/server/McpServerApplication.java
rename to 
mcp-servers/mcp-log-server/src/main/java/org/apache/hertzbeat/mcp/log/server/McpServerApplication.java
diff --git 
a/hertzbeat-mcp/src/main/java/org/apache/hertzbeat/mcp/server/service/LogService.java
 
b/mcp-servers/mcp-log-server/src/main/java/org/apache/hertzbeat/mcp/log/server/service/LogService.java
similarity index 100%
rename from 
hertzbeat-mcp/src/main/java/org/apache/hertzbeat/mcp/server/service/LogService.java
rename to 
mcp-servers/mcp-log-server/src/main/java/org/apache/hertzbeat/mcp/log/server/service/LogService.java
diff --git a/hertzbeat-mcp/src/main/resources/application.yml 
b/mcp-servers/mcp-log-server/src/main/resources/application.yml
similarity index 100%
rename from hertzbeat-mcp/src/main/resources/application.yml
rename to mcp-servers/mcp-log-server/src/main/resources/application.yml
diff --git a/pom.xml b/pom.xml
index 1fb952d14..2155f2c2e 100644
--- a/pom.xml
+++ b/pom.xml
@@ -78,6 +78,7 @@
     </mailingLists>
 
     <modules>
+        <module>hertzbeat-startup</module>
         <module>hertzbeat-manager</module>
         <module>hertzbeat-alerter</module>
         <module>hertzbeat-common</module>
@@ -90,9 +91,8 @@
         <module>hertzbeat-otel</module>
         <module>hertzbeat-e2e</module>
         <module>hertzbeat-base</module>
-        <module>hertzbeat-mcp</module>
         <module>hertzbeat-log</module>
-        <module>hertzbeat-ai-agent</module>
+        <module>hertzbeat-ai</module>
     </modules>
 
     <properties>
@@ -196,6 +196,12 @@
                 <artifactId>hertzbeat-base</artifactId>
                 <version>${hertzbeat.version}</version>
             </dependency>
+            <!-- manager -->
+            <dependency>
+                <groupId>org.apache.hertzbeat</groupId>
+                <artifactId>hertzbeat-manager</artifactId>
+                <version>${hertzbeat.version}</version>
+            </dependency>
             <!-- data warehouse -->
             <dependency>
                 <groupId>org.apache.hertzbeat</groupId>
diff --git a/script/assembly/server/bin/entrypoint.sh 
b/script/assembly/server/bin/entrypoint.sh
index 5a22566a8..7513083dd 100644
--- a/script/assembly/server/bin/entrypoint.sh
+++ b/script/assembly/server/bin/entrypoint.sh
@@ -35,7 +35,7 @@ DEPLOY_DIR=`pwd`
 # absolute directory of external configuration files, if it is a directory, it 
should end with '/',you can also directly specify a file.
 # if a directory is specified, spring will read all configuration files in the 
directory
 CONF_DIR=$DEPLOY_DIR/config
-MAIN_CLASS="org.apache.hertzbeat.manager.Manager"
+MAIN_CLASS="org.apache.hertzbeat.startup.HertzBeatApplication"
 EXT_LIB_PATH="$DEPLOY_DIR/ext-lib"
 CLASSPATH="$DEPLOY_DIR/$JAR_NAME:$EXT_LIB_PATH/*"
 # log dir
diff --git a/script/assembly/server/bin/startup.bat 
b/script/assembly/server/bin/startup.bat
index 123506964..2d5dfd6dc 100644
--- a/script/assembly/server/bin/startup.bat
+++ b/script/assembly/server/bin/startup.bat
@@ -41,7 +41,7 @@ for /f "tokens=1-5" %%i in ('netstat -ano^|findstr 
"0.0.0.0:%SERVER_PORT%"') do
        echo exit!
     goto q
 )
-set MAIN_CLASS=org.apache.hertzbeat.manager.Manager
+set MAIN_CLASS=org.apache.hertzbeat.startup.HertzBeatApplication
 set LOGS_DIR=%DEPLOY_DIR%\logs
 set EXT_LIB_PATH=%DEPLOY_DIR%\ext-lib
 set CLASSPATH=%DEPLOY_DIR%\%JAR_NAME%;%EXT_LIB_PATH%\*
diff --git a/script/assembly/server/bin/startup.sh 
b/script/assembly/server/bin/startup.sh
index 27523ee9c..f6b63db4f 100644
--- a/script/assembly/server/bin/startup.sh
+++ b/script/assembly/server/bin/startup.sh
@@ -73,7 +73,7 @@ if [ -n "$SERVER_PORT" ]; then
         fi
     fi
 fi
-MAIN_CLASS="org.apache.hertzbeat.manager.Manager"
+MAIN_CLASS="org.apache.hertzbeat.startup.HertzBeatApplication"
 EXT_LIB_PATH="$DEPLOY_DIR/ext-lib"
 CLASSPATH="$DEPLOY_DIR/$JAR_NAME:$EXT_LIB_PATH/*"
 # log dir


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to