diff --git a/mateclaw-plugin-api/pom.xml b/mateclaw-plugin-api/pom.xml
index 0221ea40..d1101b7a 100644
--- a/mateclaw-plugin-api/pom.xml
+++ b/mateclaw-plugin-api/pom.xml
@@ -4,36 +4,21 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
- vip.mate
+
+ vip.mate
+ mateclaw
+ ${revision}
+ ../pom.xml
+
+
mateclaw-plugin-api
- 1.1.0-SNAPSHOT
jar
MateClaw Plugin API
- Plugin SDK contract for MateClaw — external plugins depend only on this module
-
-
- 21
- 21
- 21
- UTF-8
- 1.1.4
-
-
-
-
-
- org.springframework.ai
- spring-ai-bom
- ${spring-ai.version}
- pom
- import
-
-
-
+ Plugin SDK contract for MateClaw - external plugins depend only on this module
-
+
org.springframework.ai
spring-ai-model
@@ -44,7 +29,6 @@
org.slf4j
slf4j-api
- 2.0.16
provided
@@ -52,16 +36,7 @@
com.fasterxml.jackson.core
jackson-databind
- 2.18.3
provided
-
-
-
- spring-milestones
- https://repo.spring.io/milestone
- false
-
-
diff --git a/mateclaw-plugin-sample/pom.xml b/mateclaw-plugin-sample/pom.xml
index a9149840..66277da1 100644
--- a/mateclaw-plugin-sample/pom.xml
+++ b/mateclaw-plugin-sample/pom.xml
@@ -4,40 +4,24 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
- vip.mate
+
+ vip.mate
+ mateclaw
+ ${revision}
+ ../pom.xml
+
+
mateclaw-plugin-sample
- 1.0.0
jar
MateClaw Sample Plugin
A sample plugin demonstrating the MateClaw Plugin SDK
-
- 21
- 21
- 21
- UTF-8
- 1.1.4
-
-
-
-
-
- org.springframework.ai
- spring-ai-bom
- ${spring-ai.version}
- pom
- import
-
-
-
-
vip.mate
mateclaw-plugin-api
- 1.1.0-SNAPSHOT
provided
@@ -52,16 +36,7 @@
org.slf4j
slf4j-api
- 2.0.16
provided
-
-
-
- spring-milestones
- https://repo.spring.io/milestone
- false
-
-
diff --git a/mateclaw-server/Dockerfile b/mateclaw-server/Dockerfile
index d6ec4146..05963794 100644
--- a/mateclaw-server/Dockerfile
+++ b/mateclaw-server/Dockerfile
@@ -35,28 +35,29 @@ FROM maven:3.9-eclipse-temurin-21 AS builder
# Optional Maven extra flags passed at build time.
# Set MAVEN_FLAGS=-Paliyun-first in .env (or via --build-arg) to put Aliyun
-# repos first — speeds up builds dramatically inside mainland China.
+# repos first. This speeds up builds inside mainland China.
ARG MAVEN_FLAGS=""
# Inject mirror settings to avoid Maven Central timeouts in restricted networks
COPY mateclaw-server/settings.xml /root/.m2/settings.xml
-# Build and install plugin-api into the local Maven cache first
-WORKDIR /plugin-api
-COPY mateclaw-plugin-api/pom.xml ./pom.xml
-COPY mateclaw-plugin-api/src ./src
-RUN mvn install -Dmaven.test.skip=true -q ${MAVEN_FLAGS}
-
-# Pre-fetch mateclaw-server dependencies (uses mirror, so this won't hang)
+# Copy the root parent plus module POMs first for Docker layer caching.
WORKDIR /build
-COPY mateclaw-server/pom.xml .
-RUN mvn dependency:go-offline -q ${MAVEN_FLAGS}
+COPY pom.xml ./pom.xml
+COPY mateclaw-plugin-api/pom.xml mateclaw-plugin-api/pom.xml
+COPY mateclaw-server/pom.xml mateclaw-server/pom.xml
+COPY mateclaw-plugin-sample/pom.xml mateclaw-plugin-sample/pom.xml
+
+# Pre-fetch backend dependencies through the reactor so the parent POM,
+# dependencyManagement, and internal module versions all resolve consistently.
+RUN mvn -pl mateclaw-server -am dependency:go-offline -q ${MAVEN_FLAGS}
# Copy backend source and inject pre-built frontend into the right classpath location
-COPY mateclaw-server/src ./src
-COPY --from=frontend-builder /static ./src/main/resources/static
+COPY mateclaw-plugin-api/src mateclaw-plugin-api/src
+COPY mateclaw-server/src mateclaw-server/src
+COPY --from=frontend-builder /static mateclaw-server/src/main/resources/static
-RUN mvn package -Dmaven.test.skip=true -q ${MAVEN_FLAGS}
+RUN mvn -pl mateclaw-server -am package -Dmaven.test.skip=true -q ${MAVEN_FLAGS}
# Stage 3 — Runtime
#
@@ -65,11 +66,11 @@ RUN mvn package -Dmaven.test.skip=true -q ${MAVEN_FLAGS}
# pre-installed. This avoids the `playwright install` step and the Alpine/musl
# incompatibility that blocks browser_use on minimal images.
#
-# We pin to the exact Playwright version declared in pom.xml (1.52.0). If you
+# We pin to the exact Playwright version declared in the root pom.xml. If you
# bump the Java dependency, bump this tag in lockstep — Microsoft rebuilds each
# tag with the matching driver, so mismatched versions cause the java driver to
# re-download browsers at runtime (defeating the whole point of this image).
-FROM mcr.microsoft.com/playwright:v1.52.0-noble
+FROM mcr.microsoft.com/playwright:v1.59.0-noble
WORKDIR /app
# JDK 21 is NOT part of the base image (it ships Node for the JS driver).
@@ -106,7 +107,7 @@ ENV PLAYWRIGHT_BROWSERS_PATH=/ms-playwright \
TZ=Asia/Shanghai \
JAVA_TOOL_OPTIONS="-Duser.timezone=Asia/Shanghai"
-COPY --from=builder /build/target/*.jar app.jar
+COPY --from=builder /build/mateclaw-server/target/*.jar app.jar
EXPOSE 18088
EXPOSE 1455
ENTRYPOINT ["java", "-jar", "-Dspring.profiles.active=mysql", "app.jar"]
diff --git a/mateclaw-server/pom.xml b/mateclaw-server/pom.xml
index 81cf535f..0fc31c02 100644
--- a/mateclaw-server/pom.xml
+++ b/mateclaw-server/pom.xml
@@ -4,70 +4,33 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
- vip.mate
+
+ vip.mate
+ mateclaw
+ ${revision}
+ ../pom.xml
+
+
mateclaw-server
- 1.4.0-SNAPSHOT
jar
MateClaw Server
MateClaw - Java+Vue Personal AI Assistant powered by Spring AI Alibaba
-
- org.springframework.boot
- spring-boot-starter-parent
- 3.5.14
-
-
-
-
- 21
- UTF-8
-
- 1.1.6
-
- 1.1.2.3
- 3.5.16
- 5.8.26
- 2.8.16
- 0.12.6
-
-
-
-
-
-
- org.springframework.ai
- spring-ai-bom
- ${spring-ai.version}
- pom
- import
-
-
-
- org.springdoc
- springdoc-openapi-bom
- ${springdoc.version}
- pom
- import
-
-
-
-
vip.mate
mateclaw-plugin-api
- 1.1.0-SNAPSHOT
-
+
org.springframework.boot
spring-boot-starter-web
-
+
org.springframework.boot
spring-boot-starter-actuator
@@ -75,14 +38,13 @@
com.alibaba.cloud.ai
spring-ai-alibaba-starter-dashscope
- ${spring-ai-alibaba.version}
-
+
org.springframework.boot
@@ -91,11 +53,10 @@
-
+
com.alibaba.cloud.ai
spring-ai-alibaba-graph-core
- ${spring-ai-alibaba.version}
@@ -104,16 +65,15 @@
spring-ai-openai
-
+
org.springframework.ai
spring-ai-anthropic
-
+
org.springframework.ai
@@ -126,31 +86,29 @@
-
+
com.h2database
h2
runtime
-
+
com.mysql
mysql-connector-j
runtime
-
+
com.baomidou
mybatis-plus-spring-boot3-starter
- ${mybatis-plus.version}
-
+
com.baomidou
mybatis-plus-jsqlparser
- ${mybatis-plus.version}
@@ -163,55 +121,49 @@
io.jsonwebtoken
jjwt-api
- ${jjwt.version}
io.jsonwebtoken
jjwt-impl
- ${jjwt.version}
runtime
io.jsonwebtoken
jjwt-jackson
- ${jjwt.version}
runtime
-
+
org.springdoc
springdoc-openapi-starter-webmvc-ui
-
+
cn.hutool
hutool-all
- ${hutool.version}
-
+
com.dingtalk.open
dingtalk-stream
- 1.3.12
-
+
com.larksuite.oapi
oapi-sdk
- 2.6.1
-
+
com.github.ben-manes.caffeine
caffeine
-
+
org.yaml
snakeyaml
@@ -228,28 +180,24 @@
com.google.zxing
core
- 3.5.4
com.google.zxing
javase
- 3.5.4
com.microsoft.playwright
playwright
- 1.59.0
-
+
net.dv8tion
JDA
- 6.4.1
-
+
club.minnced
opus-java
@@ -257,27 +205,24 @@
-
+
org.springframework.boot
spring-boot-starter-websocket
-
+
com.slack.api
slack-api-client
- 1.48.1
com.slack.api
bolt-socket-mode
- 1.48.1
org.glassfish.tyrus.bundles
tyrus-standalone-client
- 2.2.2
@@ -288,7 +233,6 @@
org.apache.poi
poi-ooxml
- 5.4.1
@@ -302,53 +246,47 @@
org.apache.xmlgraphics
batik-transcoder
- 1.19
org.apache.xmlgraphics
batik-codec
- 1.19
-
+
org.jsoup
jsoup
- 1.22.2
-
+
org.apache.tika
tika-core
- 3.3.0
org.apache.tika
tika-parser-pdf-module
- 3.3.0
org.apache.tika
tika-parser-microsoft-module
- 3.3.0
@@ -413,33 +345,30 @@
test
-
com.tngtech.archunit
archunit-junit5
- 1.3.0
test
net.javacrumbs.shedlock
shedlock-spring
- 7.7.0
net.javacrumbs.shedlock
shedlock-provider-jdbc-template
- 7.7.0
-
-
-
- maven-central
- Maven Central
- https://repo.maven.apache.org/maven2
- true
- false
-
-
-
- google-maven-central
- Google Maven Central Mirror
- https://maven-central.storage-download.googleapis.com/maven2
- true
- false
-
-
-
- aliyun-public
- Aliyun Public
- https://maven.aliyun.com/repository/public
- true
- false
-
-
-
- spring-milestones
- Spring Milestones
- https://repo.spring.io/milestone
- true
- false
-
-
-
- aliyun-spring
- Aliyun Spring Mirror
- https://maven.aliyun.com/repository/spring
- true
- false
-
-
-
-
-
-
- maven-central
- Maven Central
- https://repo.maven.apache.org/maven2
- true
- false
-
-
- google-maven-central
- Google Maven Central Mirror
- https://maven-central.storage-download.googleapis.com/maven2
- true
- false
-
-
- aliyun-public
- Aliyun Public
- https://maven.aliyun.com/repository/public
- true
- false
-
-
-
-
-
- aliyun-first
-
-
- aliyun-public-first
- https://maven.aliyun.com/repository/public
- true
- false
-
-
- aliyun-spring-first
- https://maven.aliyun.com/repository/spring
- true
- false
-
-
-
-
- aliyun-public-first
- https://maven.aliyun.com/repository/public
- true
- false
-
-
-
-
+
+ mateclaw-plugin-api
+ mateclaw-server
+ mateclaw-plugin-sample
+
+
+
+
+ 1.4.0-SNAPSHOT
+
+
+ 21
+ ${java.version}
+ ${java.version}
+ ${java.version}
+ UTF-8
+
+
+ 3.5.14
+ 1.1.6
+ 1.1.2.3
+ 2.8.16
+
+
+ 3.5.16
+ 5.8.26
+ 0.12.6
+ 2.0.16
+ 2.18.3
+
+
+ 1.3.12
+ 2.6.1
+ 6.4.1
+ 1.48.1
+
+
+ 3.5.4
+ 1.59.0
+ 2.2.2
+
+
+ 5.4.1
+ 1.19
+ 1.22.2
+ 3.3.0
+ 10.2.0
+ 0.28.0
+ 1.3.0
+ 7.7.0
+ 1.5.3
+ 3.0.7
+ 4.1.1
+
+
+ 3.14.1
+ 3.8.1
+ 3.5.5
+
+
+
+
+
+
+
+ org.springframework.boot
+ spring-boot-dependencies
+ ${spring-boot.version}
+ pom
+ import
+
+
+ org.springframework.ai
+ spring-ai-bom
+ ${spring-ai.version}
+ pom
+ import
+
+
+ org.springdoc
+ springdoc-openapi-bom
+ ${springdoc.version}
+ pom
+ import
+
+
+
+
+
+ vip.mate
+ mateclaw-plugin-api
+ ${revision}
+
+
+ vip.mate
+ mateclaw-server
+ ${revision}
+
+
+ vip.mate
+ mateclaw-plugin-sample
+ ${revision}
+
+
+
+
+ com.alibaba.cloud.ai
+ spring-ai-alibaba-starter-dashscope
+ ${spring-ai-alibaba.version}
+
+
+ com.alibaba.cloud.ai
+ spring-ai-alibaba-graph-core
+ ${spring-ai-alibaba.version}
+
+
+
+
+ com.baomidou
+ mybatis-plus-spring-boot3-starter
+ ${mybatis-plus.version}
+
+
+ com.baomidou
+ mybatis-plus-jsqlparser
+ ${mybatis-plus.version}
+
+
+
+
+ cn.hutool
+ hutool-all
+ ${hutool.version}
+
+
+ io.jsonwebtoken
+ jjwt-api
+ ${jjwt.version}
+
+
+ io.jsonwebtoken
+ jjwt-impl
+ ${jjwt.version}
+
+
+ io.jsonwebtoken
+ jjwt-jackson
+ ${jjwt.version}
+
+
+ org.slf4j
+ slf4j-api
+ ${slf4j.version}
+
+
+ com.fasterxml.jackson.core
+ jackson-databind
+ ${jackson.version}
+
+
+
+
+ com.dingtalk.open
+ dingtalk-stream
+ ${dingtalk-stream.version}
+
+
+ com.larksuite.oapi
+ oapi-sdk
+ ${lark-oapi.version}
+
+
+ com.google.zxing
+ core
+ ${zxing.version}
+
+
+ com.google.zxing
+ javase
+ ${zxing.version}
+
+
+ com.microsoft.playwright
+ playwright
+ ${playwright.version}
+
+
+ net.dv8tion
+ JDA
+ ${jda.version}
+
+
+ com.slack.api
+ slack-api-client
+ ${slack.version}
+
+
+ com.slack.api
+ bolt-socket-mode
+ ${slack.version}
+
+
+ org.glassfish.tyrus.bundles
+ tyrus-standalone-client
+ ${tyrus.version}
+
+
+
+
+ org.apache.poi
+ poi-ooxml
+ ${poi.version}
+
+
+ org.apache.xmlgraphics
+ batik-transcoder
+ ${batik.version}
+
+
+ org.apache.xmlgraphics
+ batik-codec
+ ${batik.version}
+
+
+ org.jsoup
+ jsoup
+ ${jsoup.version}
+
+
+ org.apache.tika
+ tika-core
+ ${tika.version}
+
+
+ org.apache.tika
+ tika-parser-pdf-module
+ ${tika.version}
+
+
+ org.apache.tika
+ tika-parser-microsoft-module
+ ${tika.version}
+
+
+ org.xhtmlrenderer
+ flying-saucer-pdf
+ ${flying-saucer.version}
+
+
+ org.commonmark
+ commonmark
+ ${commonmark.version}
+
+
+ org.commonmark
+ commonmark-ext-gfm-tables
+ ${commonmark.version}
+
+
+ org.commonmark
+ commonmark-ext-yaml-front-matter
+ ${commonmark.version}
+
+
+ org.commonmark
+ commonmark-ext-gfm-strikethrough
+ ${commonmark.version}
+
+
+ org.commonmark
+ commonmark-ext-autolink
+ ${commonmark.version}
+
+
+
+
+ com.tngtech.archunit
+ archunit-junit5
+ ${archunit.version}
+
+
+ net.javacrumbs.shedlock
+ shedlock-spring
+ ${shedlock.version}
+
+
+ net.javacrumbs.shedlock
+ shedlock-provider-jdbc-template
+ ${shedlock.version}
+
+
+
+
+ org.jgrapht
+ jgrapht-core
+ ${jgrapht.version}
+
+
+ org.apache.pdfbox
+ pdfbox
+ ${pdfbox.version}
+
+
+ io.pebbletemplates
+ pebble
+ ${pebble.version}
+
+
+
+
+
+
+
+
+
+ org.springframework.boot
+ spring-boot-maven-plugin
+ ${spring-boot.version}
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+ ${maven-compiler-plugin.version}
+
+
+ org.apache.maven.plugins
+ maven-dependency-plugin
+ ${maven-dependency-plugin.version}
+
+
+ org.apache.maven.plugins
+ maven-surefire-plugin
+ ${maven-surefire-plugin.version}
+
+
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+
+ ${maven.compiler.release}
+ ${project.build.sourceEncoding}
+
+
+
+
+
+
+
+
+ maven-central
+ Maven Central
+ https://repo.maven.apache.org/maven2
+ true
+ false
+
+
+ google-maven-central
+ Google Maven Central Mirror
+ https://maven-central.storage-download.googleapis.com/maven2
+ true
+ false
+
+
+ aliyun-public
+ Aliyun Public
+ https://maven.aliyun.com/repository/public
+ true
+ false
+
+
+ spring-milestones
+ Spring Milestones
+ https://repo.spring.io/milestone
+ true
+ false
+
+
+ aliyun-spring
+ Aliyun Spring Mirror
+ https://maven.aliyun.com/repository/spring
+ true
+ false
+
+
+
+
+
+
+ maven-central
+ Maven Central
+ https://repo.maven.apache.org/maven2
+ true
+ false
+
+
+ google-maven-central
+ Google Maven Central Mirror
+ https://maven-central.storage-download.googleapis.com/maven2
+ true
+ false
+
+
+ aliyun-public
+ Aliyun Public
+ https://maven.aliyun.com/repository/public
+ true
+ false
+
+
+
+
+
+
+ aliyun-first
+
+
+ aliyun-public-first
+ https://maven.aliyun.com/repository/public
+ true
+ false
+
+
+ aliyun-spring-first
+ https://maven.aliyun.com/repository/spring
+ true
+ false
+
+
+
+
+ aliyun-public-first
+ https://maven.aliyun.com/repository/public
+ true
+ false
+
+
+
+
+