mateclaw/mateclaw-server/src/main/java/vip/mate/plugin/LoadedPlugin.java
倪程伟 0a58b3fb35
feat(plugin): 插件化搜索 Provider — PluginType.SEARCH + PluginSearchProvider SPI (#477) (#479)
* docs: add plugin search provider design spec and plan (#477)

Claude-Session: https://claude.ai/code/session_013uyvXEazZkhNw27geRtakK

* feat(plugin-api): add SEARCH plugin type and PluginSearchProvider SPI (#477)

Claude-Session: https://claude.ai/code/session_013uyvXEazZkhNw27geRtakK

* feat(search): make SearchProviderRegistry accept runtime plugin providers (#477)

Claude-Session: https://claude.ai/code/session_013uyvXEazZkhNw27geRtakK

* test(search): cover blank plugin provider id rejection (#477)

Claude-Session: https://claude.ai/code/session_013uyvXEazZkhNw27geRtakK

* feat(plugin): bridge PluginSearchProvider to the core SearchProvider chain (#477)

Claude-Session: https://claude.ai/code/session_013uyvXEazZkhNw27geRtakK

* feat(plugin): registerSearchProvider lifecycle — register, disable, rollback (#477)

Claude-Session: https://claude.ai/code/session_013uyvXEazZkhNw27geRtakK

* fix(plugin): preserve cause when wrapping registry conflict as PluginException (#477)

Claude-Session: https://claude.ai/code/session_013uyvXEazZkhNw27geRtakK

* feat(plugin): add search provider sample plugin module (#477)

Claude-Session: https://claude.ai/code/session_013uyvXEazZkhNw27geRtakK

* docs(plugin): note unused query params and narrow parse exception in search sample (#477)

Claude-Session: https://claude.ai/code/session_013uyvXEazZkhNw27geRtakK

* docs(architecture): document the standalone-jar plugin system and SEARCH type (#477)

Claude-Session: https://claude.ai/code/session_013uyvXEazZkhNw27geRtakK
2026-07-03 16:57:27 +08:00

51 lines
1.5 KiB
Java

package vip.mate.plugin;
import lombok.Data;
import vip.mate.plugin.api.MateClawPlugin;
import vip.mate.plugin.api.PluginManifest;
import java.net.URLClassLoader;
import java.util.ArrayList;
import java.util.List;
/**
* Internal state holder for a loaded plugin.
*
* @author MateClaw Team
*/
@Data
public class LoadedPlugin {
private final PluginManifest manifest;
private final MateClawPlugin plugin;
private final URLClassLoader classLoader;
/** Set after construction (circular reference with PluginContextImpl) */
private PluginContextImpl context;
/** Names of tools registered by this plugin */
private final List<String> registeredTools = new ArrayList<>();
/** Channel types registered by this plugin */
private final List<String> registeredChannels = new ArrayList<>();
/** Search provider ids registered by this plugin */
private final List<String> registeredSearchProviders = new ArrayList<>();
/** Provider ID registered by this plugin (null if none) */
private String registeredProvider;
/** Memory provider ID registered by this plugin (null if none) */
private String registeredMemoryProvider;
/** Whether the plugin is currently enabled */
private boolean enabled = true;
public LoadedPlugin(PluginManifest manifest, MateClawPlugin plugin,
URLClassLoader classLoader) {
this.manifest = manifest;
this.plugin = plugin;
this.classLoader = classLoader;
}
}