diff --git a/mateclaw-plugin-mem0/src/main/java/vip/mate/plugin/mem0/Mem0Plugin.java b/mateclaw-plugin-mem0/src/main/java/vip/mate/plugin/mem0/Mem0Plugin.java index f0454c67..62696403 100644 --- a/mateclaw-plugin-mem0/src/main/java/vip/mate/plugin/mem0/Mem0Plugin.java +++ b/mateclaw-plugin-mem0/src/main/java/vip/mate/plugin/mem0/Mem0Plugin.java @@ -4,6 +4,8 @@ import org.slf4j.Logger; import vip.mate.plugin.api.MateClawPlugin; import vip.mate.plugin.api.PluginContext; +import java.net.URI; + /** * MateClaw plugin entrypoint that registers {@link Mem0Provider} with the * platform's memory subsystem. @@ -94,7 +96,7 @@ public class Mem0Plugin implements MateClawPlugin { private static String maskUrl(String url) { if (url == null || url.isBlank()) return "(unset)"; try { - java.net.URI u = java.net.URI.create(url); + URI u = URI.create(url); String host = u.getHost(); int port = u.getPort(); return u.getScheme() + "://" + host + (port > 0 ? ":" + port : ""); diff --git a/mateclaw-plugin-mem0/src/main/java/vip/mate/plugin/mem0/Mem0Provider.java b/mateclaw-plugin-mem0/src/main/java/vip/mate/plugin/mem0/Mem0Provider.java index f65a99ed..95ea8df7 100644 --- a/mateclaw-plugin-mem0/src/main/java/vip/mate/plugin/mem0/Mem0Provider.java +++ b/mateclaw-plugin-mem0/src/main/java/vip/mate/plugin/mem0/Mem0Provider.java @@ -30,7 +30,7 @@ import java.util.concurrent.Executors; * When {@code ownerKey} is null/blank, both recall and sync are skipped — Mem0 * requires {@code user_id}. * - *

Asynchronous sync: a single-thread virtual-thread-per-task executor is used + *

Asynchronous sync: a single-thread daemon executor is used * so that bursts of turns don't pile up on the platform's request thread. * * @author MateClaw Team diff --git a/mateclaw-plugin-mem0/src/test/java/vip/mate/plugin/mem0/Mem0PluginTest.java b/mateclaw-plugin-mem0/src/test/java/vip/mate/plugin/mem0/Mem0PluginTest.java index 3be42abc..b4f0739a 100644 --- a/mateclaw-plugin-mem0/src/test/java/vip/mate/plugin/mem0/Mem0PluginTest.java +++ b/mateclaw-plugin-mem0/src/test/java/vip/mate/plugin/mem0/Mem0PluginTest.java @@ -3,13 +3,18 @@ package vip.mate.plugin.mem0; import org.junit.jupiter.api.Test; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.springframework.ai.chat.model.ChatModel; +import org.springframework.ai.tool.ToolCallback; import vip.mate.plugin.api.PluginContext; import vip.mate.plugin.api.PluginException; +import vip.mate.plugin.api.channel.PluginChannelAdapter; import vip.mate.plugin.api.memory.PluginMemoryProvider; +import vip.mate.plugin.api.search.PluginSearchProvider; import java.util.HashMap; import java.util.Map; import java.util.concurrent.atomic.AtomicReference; +import java.util.function.Supplier; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatThrownBy; @@ -132,10 +137,10 @@ class Mem0PluginTest { // The remaining methods are not used by Mem0Plugin; stub them out. - @Override public void registerTool(org.springframework.ai.tool.ToolCallback tool) { throw new UnsupportedOperationException(); } - @Override public void registerTool(org.springframework.ai.tool.ToolCallback tool, java.util.function.Supplier availabilityCheck) { throw new UnsupportedOperationException(); } - @Override public void registerProvider(String providerId, org.springframework.ai.chat.model.ChatModel chatModel) { throw new UnsupportedOperationException(); } - @Override public void registerChannel(vip.mate.plugin.api.channel.PluginChannelAdapter channel) { throw new UnsupportedOperationException(); } - @Override public void registerSearchProvider(vip.mate.plugin.api.search.PluginSearchProvider provider) { throw new UnsupportedOperationException(); } + @Override public void registerTool(ToolCallback tool) { throw new UnsupportedOperationException(); } + @Override public void registerTool(ToolCallback tool, Supplier availabilityCheck) { throw new UnsupportedOperationException(); } + @Override public void registerProvider(String providerId, ChatModel chatModel) { throw new UnsupportedOperationException(); } + @Override public void registerChannel(PluginChannelAdapter channel) { throw new UnsupportedOperationException(); } + @Override public void registerSearchProvider(PluginSearchProvider provider) { throw new UnsupportedOperationException(); } } } diff --git a/mateclaw-plugin-mem0/src/test/java/vip/mate/plugin/mem0/Mem0ProviderTest.java b/mateclaw-plugin-mem0/src/test/java/vip/mate/plugin/mem0/Mem0ProviderTest.java index 615ca6ad..dceedf42 100644 --- a/mateclaw-plugin-mem0/src/test/java/vip/mate/plugin/mem0/Mem0ProviderTest.java +++ b/mateclaw-plugin-mem0/src/test/java/vip/mate/plugin/mem0/Mem0ProviderTest.java @@ -140,7 +140,7 @@ class Mem0ProviderTest { void syncTurn_pushesAsynchronouslyWithoutBlocking() throws Exception { provider.syncTurn(1L, "conv-1", "hello", "world"); - // Wait briefly for the virtual thread to fire the POST. + // Wait briefly for the async executor to fire the POST. long deadline = System.currentTimeMillis() + 2000; while (addCount.get() == 0 && System.currentTimeMillis() < deadline) { Thread.sleep(20); diff --git a/mateclaw-server/src/main/java/vip/mate/plugin/bridge/PluginMemoryBridge.java b/mateclaw-server/src/main/java/vip/mate/plugin/bridge/PluginMemoryBridge.java index f8521cfa..b1e9f542 100644 --- a/mateclaw-server/src/main/java/vip/mate/plugin/bridge/PluginMemoryBridge.java +++ b/mateclaw-server/src/main/java/vip/mate/plugin/bridge/PluginMemoryBridge.java @@ -47,7 +47,8 @@ public class PluginMemoryBridge implements MemoryProvider { @Override public String prefetch(Long agentId, String userQuery, String ownerKey) { - // 透传 ownerKey 到插件 provider;插件若未 override 三参版会走 default 退化到两参 + // Forward ownerKey to the plugin provider; plugins that don't override the + // three-arg variant fall back to the two-arg default (ownerKey dropped). return delegate.prefetch(agentId, userQuery, ownerKey); }