extensions 扩展开发(hook? plugin?)
2026年4月22日 下午1:19:08
SolonCode Extensions 是基于 Java 技术栈的扩展机制,类似于 ClaudeCode 的 Hook 或 OpenCode 的 Plugin。
它通过实现 HarnessExtension 接口,深度介入 ReActAgent.Builder 的装配过程,支持开发者为 Agent 添加工具 (Tools)、设置拦截器 (Interceptors) 等。相比高层接口,这是一种更基础、更自由且全面的定制方式。
1、核心接口
所有扩展插件都需要实现 HarnessExtension 接口。通过 configure 方法,你可以获得当前 Agent 的名称及其构建器实例,从而进行增强。
引入依赖(注意:soloncode 已依赖的包,都要标为 provided)
<dependency>
<groupId>org.noear</groupId>
<artifactId>solon-ai-harness</artifactId>
<scope>provided</scope>
</dependency>
编写代码(仅为示意)
public class Extension1 implements HarnessExtension {
@Override
public void configure(String agentName, ReActAgent.Builder agentBuilder) {
// 在此处对 agentBuilder 进行定制,例如添加 Tool 或 Interceptor
agentBuilder.defaultInterceptorAdd(new ReActInterceptor() {
@Override
public void onAgentStart(ReActTrace trace) {
System.out.println("任务要开始了...");
}
@Override
public void onReason(ReActTrace trace, AssistantMessage message) {
System.out.println("又思考了...");
}
@Override
public ChatResponse interceptCall(ChatRequest req, CallChain chain) throws IOException {
System.out.println("要调用工具了...");
return chain.doIntercept(req);
}
});
}
}
2、安装方式
编译打包后,将生成的 JAR 包存放在以下目录:
- 路径:
~/.soloncode/extensions/
3、装配与生效
SolonCode 提供两种装配方式:手动显式配置 和 基于 Solon SPI 的自动装配。
方式 A:手动配置 (Manual)
适用于需要精确控制加载顺序或仅在特定环境下启用的扩展。
在配置文件中指定扩展类的全限定名:
soloncode:
extensions:
- "org.codecli.ext1.MyExtension"
方式 B:自动装配 (Auto-Configuration)
推荐方式。基于 Solon Plugin 机制,实现“即插即用”,无需在 YAML 中手动声明。
1) 创建插件类:
public class MyExtensionPlugin implements Plugin {
@Override
public void start(AppContext context) throws Throwable {
// 将扩展类注册到容器中,SolonCode 会自动识别并加载
context.beanMake(MyExtension.class);
}
}
2) 配置 SPI:
在资源目录 META-INF/solon/ 下创建插件声明文件(参考:Solon SPI 机制)。