## v3.10.1 更新与兼容说明

* 新增 acp-sdk 模块（从 solon-ai-acp 分离出来，方便独立升级）
* 新增 solon-ai-harness 智能体马具框架
* 添加 solon-ai-core ChatModel.of().systemPrompt 方法
* 添加 solon-ai-core 工具执行时的参数注解支持
* 添加 solon-ai-core RepositoryTool 工具，为实现 Agent RAG 提供支持
* 添加 solon-ai-core AbsToolProvider 类（取代之前添加 toolObj 的方式）
* 优化 solon-ai-skill-cli ExpertSkill 原来的二档展示升为三级
* 优化 solon-ai-skill-restapi 原来的三档展示升为四级，并添加分组（可增强注意力）
* 优化 solon-ai-skill-toolgateway 原来的三档展示升为四级，并添加分组（可增强注意力）
* 优化 solon-ai-agent ReActRequest, TeamRequest 支持叠加 options
* 修复 solon-ai-skill-cli ExpertSkill grep 可能失效的问题


## v3.10.0 更新与兼容说明

* 添加 solon-ai-agent ThoughtChunk 流块
* 添加 solon-ai-agent Metrics.addMetrics 锁安全
* 添加 solon-ai-agent AgentChunk.getMeta 流块元数据（方便在传递过程中，做标识）
* 优化 solon-ai-agent ActionTask 执行完后就更新快照（避免可能的长时间没有更新快照）
* 修复 solon-ai-core ChatModel.outputSchema 配置无效的问题
* 修复 solon-ai-core 工具调用时‘可能’出现消息内容重复的问题（重要，v3.9.2 时出现）


## v3.9.6 更新与兼容说明

* 添加 solon-ai-core ChatModel.outputSchema 配置支持（且与 Agent 统一基于方言实现，各方言可定制）
* 添加 solon-ai-core ChatModel.contextLength 配置支持（为 Agent 方便自动计算限制数）
* 添加 solon-ai-core AssistantMessage.getJsonContent 方法
* 添加 solon-ai-core MarkdownUtil 工具类
* 添加 solon-ai-dialect-gemini tool-call 的思考签名支持
* 添加 solon-ai-agent ReActChunk.getMetrics 方法
* 优化 solon-ai-core AbstractChatDialect 解析 tool 参数的兼容性
* 优化 solon-ai-dialect-dashscope 方言 支持流式传输与百炼联网搜索
* 优化 solon-ai-dialect-anthropic tool.args 不规范时的兼容性（比如 json 不完整）
* 优化 solon-ai-dialect-gemini 特定 provider 结束时返回 content 为空的消息才设置finishReason 导致结束标志被提前过滤
* 优化 solon-ai-agent ReActAgent onThought 事件，优先使用 getReasoning 获取 `<think>` 思考内容
* 优化 solon-ai-agent ReActAgent SummarizationInterceptor 添加 maxContextLength 控制参数（很重要）
* 优化 solon-ai-agent ActionChunk 分为 ActionEndChunk 和 ActionStartChunk（并保留 ActionChunk 标为弃用）
* 优化 solon-ai-agent 流式处理 `catch (Exception`，换成 `catch (Throwable`
* 优化 solon-ai-skill-restapi 每个 api 可以添加独立的验证机制
* 优化 solon-ai-skill-cli 避免 bash 把当前进程给删掉了
* 调整 solon-ai-agent 临时挂起操作，由 XxxTrace 转到 AgentSession（更统一）
* 调整 solon-ai-core Skill 的激活逻辑，如果 getInstruction 为空，则不进入 SystemPrompt（之前还要 description 为空）
* 修复 solon-ai-agent ReActAgent 思考事件触发逻辑，确保在所有情况下都被调用

## v3.9.5 更新与兼容说明

* 新增 mcp-sdk 插件（从 solon-ai-mcp 独立出来）
* 新增 solon-ai-skill-toolgateway 插件
* 新增 solon-ai-search-tavily 插件
* 新增 solon-ai-ui-aisdk 插件
* 添加 solon-ai-core `__sessionId` 自动作为工具上下文和提示词属性（用于传递会话id）
* 添加 solon-ai-core SkillProvider 接口
* 添加 solon-ai-core AbsTool 类
* 添加 solon-ai-core AiUsage thinkTokens 字段
* 添加 solon-ai-core ChatConfig.getReasoningFieldName 自动处理，兼容 deepseek 新的变化
* 添加 solon-ai-core ChatModel options 配置自动转强类型（llm 不能接收str）
* 添加 solon-ai-agent ReActInterceptor.onObservation durationMs 参数（时长毫秒数）
* 添加 solon-ai-agent ReActChunk isNormal(用于识别是否为正常结束)
* 添加 solon-ai-skill-memory MemSkill 支持会话隔离与共享
* 优化 solon-ai-mcp 独立出 mcp-sdk 包
* 优化 solon-ai-dialect-claude 方言适配（及 `api.kimi.com/coding` 兼容性）
* 优化 solon-ai-dialect-openai 与 api.minimax.io 的兼容性
* 优化 solon-ai-agent SummarizationInterceptor
* 优化 solon-ai-agent ReActSystemPrompt 描述
* 优化 solon-ai-skill-memory MemSkill 取消 userId 参数，自动从上下文中取
* 优化 solon-ai-skill-cli
* 优化 Solon AI Skill 指令层级控制
* 调整 solon-ai-dialect-claude 更名为 solon-ai-dialect-anthropic（更合适）

## v3.9.4 更新与兼容说明

* 新增 solon-ai-skill-lucene 插件
* 新增 solon-ai-skill-diff 插件
* 新增 solon-ai-skill-memory 插件
* 添加 solon-ai-core toolContext 自动转为 Prompt.attrs 的机制（方便 skill 传递）
* 添加 solon-ai-agent ReActChunk, TeamChunk getTrace 方法
* 添加 solon-ai-agent `__sessionId` 作为智能体的必要工具上下文（方便工具的会话数据隔离）
* 优化 solon-ai-core chatModel 方言的（不规范的）兼容性处理
* 优化 solon-ai-core buildToolCallBuilder 兼容（有些 llm stream ，会部分全量多次提供）
* 优化 solon-ai-agent SummarizationInterceptor 增加策略机制并内置4个策略
* 修复 solon-ai-core ChatModel.stream 过程异常时会破坏流响应的问题
* 修复 solon-ai-agent ReasonTask.callWithRetry 网络异常时会中断工作流的问题
* 修复 solon-ai-agent ReActAgent 流式请求时，可能无法记忆结果内容的问题


## v3.9.3 更新与兼容说明


* 重构 solon-ai-agent Plan-ReAct 模式（相对之前，新设计智能、态动、按需）
* 新增 solon-ai-acp 插件（可以对接支持 acp 协议的 IDE）
* 添加 solon-ai-core ChatSessionProvider
* 添加 solon-ai-core FunctionTool:call 方法
* 添加 solon-ai-mcp FunctionPrompt:get 方法
* 添加 solon-ai-mcp FunctionResource:read 方法
* 添加 solon-ai-core ToolSchemaUtil.resultConvert 方法（将 tool 转换从内部，转到外部）
* 添加 solon-ai-agent ReActAgent maxStepsExtensible 配置，允许通过 HITL 扩容步数
* 优化 solon-ai-core ChatModel 与 DeepSeek-R1 兼容性
* 优化 solon-ai-agent ReActAgent 与 DeepSeek-R1 兼容性（手造的 AssistantMessage 需要自动补字段）
* 优化 solon-ai-agent FunctionTool 增加 tool 多模态与单模态兼容处理
* 优化 solon-ai-skill-cli CliSkill 进一步与 Claude Code 规范对齐（接近 100%）
* 优化 solon-ai-skill-cli CodeCLI exit 改为进程退出
* 优化 solon-ai-mcp 无心跳时，支持自动复位尝试
* 调整 solon-ai-mcp McpClientProvider 接口，优化多模态适配
* 调整 solon-ai-core 多模态体系（AiMedia 更名为 ContentBlock，并转移到 chat 包下）
* 调整 solon-ai-core UserMessage medias 更名为 blocks，hasMedias 更名为 isMultiModal
* 调整 solon-ai-core ToolMessage 添加 blocks，isMultiModal（工具支持多模态）
* 调整 solon-ai-core ChatDialect 接口，对多模态和 R1 更友好
* 移除 solon-ai-core 移除 ImageModel 体系，由 GenerateModel 体系接替（v3.5 时增加)
* 修复 solon-ai-agent ReActAgent 重试时会消息倍增的问题 
* 修复 solon-ai-agent ReActAgent，TeamAgent 在恢复执行时，会重置 Options 的问题


变更说明：

| 旧名（强调多媒体）                                     | 新名（强调多模态内容块）                                          |
|-----------------------------------------------|-------------------------------------------------------|
| AiMedia                                       | ContentBlock                                          |
| Text                                          | TextBlock                                             |
| Image                                         | ImageBlock                                            |
| Audio                                         | AudioBlock                                            |
| Video                                         | VideoBlock                                            |
|                                               |                                                       |
| UserMessage.getMedias()                       | getBlocks()                                           |
| UserMessage.hasMedias()                       | isMultiModal()                                        |
| /                                             | ToolMessage.getBlocks()                               |
| /                                             | ToolMessage.isMultiModal()                            |
|                                               |                                                       |
| McpClientProvider.callTool()                  | callToolRequest()                                     |
| McpClientProvider.callToolAsText()            | callTool()                                            |
| McpClientProvider.callToolAsImage()           | /                                                     |
| McpClientProvider.callToolAsAudio()           | /                                                     |
| McpClientProvider.readResource()              | readResourceRequest()                                 |
| McpClientProvider.readResourceAsText()        | readResource()                                        |
| McpClientProvider.getPrompt()                 | getPromptRequest()                                    |
| McpClientProvider.getPromptAsMessage()        | getPrompt()                                           |
| `org.noear.solon.ai.mcp.server.prompt.*`      | `org.noear.solon.ai.chat.prompt.*` （prompt 是公用元素）     | 
| `org.noear.solon.ai.mcp.server.resource.*`    | `org.noear.solon.ai.chat.resource.*` （resource 是公用元素） | 






## v3.9.0 更新与兼容说明



* 新增 `solon-ai-core` Solon AI Skills（技能）体系
* 新增 `solon-ai-search-bocha` 插件
* 添加 `solon-ai-core` defaultToolsContextPut 方法
* 添加 `solon-ai-core` Prompt attrPut, attr 属性相关方法（可以在拦截时控制权限）
* 添加 `solon-ai-core` FunctionTool meta 元数据相关方法（可对描述语进行染色）
* 添加 `solon-ai-mcp` FunctionPrompt meta 元数据相关方法（可对描述语进行染色）
* 添加 `solon-ai-mcp` FunctionResource meta 元数据相关方法（可对描述语进行染色）
* 添加 `solon-ai-agent` NoneProtocol（无协议模式）
* 添加 `solon-ai-agent` ReActAgent Plan 支持（默认为关闭）。
* 添加 `solon-ai-agent`  SimpleInterceptor 替代 ChatInterceptor，方便后续扩展
* 优化 `solon-ai-core` Gemini 方言适配
* 优化 `solon-ai-core` Prompt 接口，方法更丰富
* 优化 `solon-ai-agent` A2AProtocol 协议代码
* 优化 `solon-ai-agent` SwarmProtocol 协议代码
* 优化 `solon-ai-agent` HierarchicalProtocol 协议代码
* 优化 `solon-ai-agent` SequentialProtocol 协议代码，添加专属任务（可节省 token）
* 修复 `solon-ai-core` ToolSchemaUtil `Param` 注解别名没有生效的问题
* 修复 `solon-ai-agent` ReActAgent 没有拦截器时 ReActAgent 不能传递 toolsContext 的问题
* 调整 `solon-ai-agent` Agent 相关接口保持与 ChatModel 一致性




## v3.8.1 更新与兼容说明



* 新增 `solon-ai-agent` 插件
* 添加 `solon-ai-core` autoToolCall 聊天模型选项（默认为 true）
* 添加 `solon-ai-core` ChatResponse:getResultContent
* 添加 `solon-ai-core` AssistantMessage.toBean 方法。
* 优化 `solon-ai-core` AssistantMessage.getResultContent 处理
* 调整 `solon-ai-croe` ChatSession 不再扩展 ChatPrompt（打断两者关系，后者定位偏固定数据


新增三种模式的智能体：

| 智能体          | 模式描述                                      |
|--------------|-------------------------------------------|
| SimpleAgent  | 简单模式                                      | 
| ReActAgent   | 自省模式，思考+行动。                               | 
| TeamAgent    | 协作模式，分工+编排。多智能体系统（multi-agent system，MAS） | 


新特性示例：ReActAgent

```java
public class DemoApp {
  public static void main(String[] args) throws Throwable {
    ChatModel chatModel = LlmUtil.getChatModel();

    SimpleAgent robot = SimpleAgent.of(chatModel)
            .toolAdd(new MethodToolProvider(new TimeTool()))
            .build();

    String answer = robot.prompt("现在几点了？").call().getContent();

    System.out.println("Robot 答复: " + answer);
  }

  public static class TimeTool {
    @ToolMapping(description = "获取当前系统时间")
    public String getTime() {
      return LocalDateTime.now().toString();
    }
  }
}
```




## v3.8.0 更新与兼容说明



重要变化：

* mcp-java-sdk 升为 v0.17 （支持 2025-06-18 版本协议）
* 添加 mcp-server McpChannel.STREAMABLE_STATELESS 通道支持（集群友好）
* 添加 mcp-server 异步支持

具体更新：

* 添加 solon-ai FunctionPrompt:handleAsync（用于 mcp-server 异步支持）
* 添加 solon-ai FunctionResource:handleAsync（用于 mcp-server 异步支持）
* 添加 solon-ai FunctionTool:handleAsync（用于 mcp-server 异步支持）
* 添加 solon-ai-core ChatMessage:toNdjson,fromNdjson 方法（替代 ChatSession:toNdjson, loadNdjson），新方法机制上更自由
* 添加 solon-ai-core ToolSchemaUtil.jsonSchema Publisher 泛型支持
* 添加 solon-ai-mcp mcp-java-sdk v0.17 适配（支持 2025-06-18 版本协议）
* 添加 solon-ai-mcp mcp-server 异步支持
* 添加 solon-ai-mcp mcp-server streamable_stateless 支持
* 添加 solon-ai-mcp Tool,Resource,Prompt 对 `org.reactivestreams.Publisher<X>` 异步返回支持
* 添加 solon-ai-mcp McpServerHost 服务宿主接口，用于隔离有状态与无状态服务
* 添加 solon-ai-mcp McpChannel.STREAMABLE_STATELESS （服务端）无状态会话
* 添加 solon-ai-mcp McpClientProvider:customize 方法（用于扩展 roots, sampling 等）
* 添加 solon-ai-mcp mcpServer McpAsyncServerExchange 注入支持（用于扩展 roots, sampling 等）
* 优化 solon-ai-dialect-openai claude 兼容性
* 优化 solon-ai-mcp mcp StreamableHttp 模式下 服务端正常返回时 客户端异常日志打印的情况
* 调整 solon-ai-mcp getResourceTemplates、getResources 不再共享注册
* 调整 solon-ai-mcp McpServerManager 内部接口更名为 McpPrimitivesRegistry （MCP 原语注册器）
* 调整 solon-ai-mcp McpClientProvider 默认不启用心跳机制（随着 mcp-sdk 的成熟，server 都有心跳机制了）


新特性展示：1.MCP 无状态会话（STREAMABLE_STATELESS）和 2.CompletableFuture 异步MCP工具

```java
@McpServerEndpoint(channel = McpChannel.STREAMABLE_STATELESS, mcpEndpoint = "/mcp1")
public class McpServerTool {
    @ToolMapping(description = "查询天气预报", returnDirect = true)
    public CompletableFuture<String> getWeather(@Param(description = "城市位置") String location) {
        return CompletableFuture.completedFuture("晴，14度");
    }
}
```

传输方式对应表：（服务端与客户端，须使用对应的传输方式才可通讯）

| 服务端                   | 客户端         |  备注               |
|-----------------------|-------------|-----------------|
| STDIO                 | STDIO       |                 |
| SSE                   | SSE         |                 |
| STREAMABLE            | STREAMABLE  |                 |
| STREAMABLE_STATELESS  | STREAMABLE  | 对 server 集群很友好  |


* STREAMABLE_STATELESS 集群，不需要 ip_hash，但“原语”变化后无法通知 client




## v3.5.3（修复问题，并优化兼容性）

#### 1、更新说明


* 优化 solon-ai-core chatModel.stream 与背压处理的兼容性
* 调整 solon-ai-map getPrompt,readResource,callTool 取消自动异常转换（侧重原始返回）
* 调整 solon-ai-map callTool 错误结果传递，自动添加 'Error:' （方便 llm 识别）
* 修复 solon-ai-mcp callTool isError=true 时，不能正常与 llm 交互的问题
* 修复 solon-ai-mcp ToolAnnotations:returnDirect 为 null 时的传递兼容性


Solon 配套的更新参考：

* 优化 solon-rx 确保 SimpleSubscriber:doOnComplete 只被运行一次（之前可能会被外部触发多次）
* 优化 solon-rx SimpleSubscriber 改为流控模式（只请求1，之前请求 max）//所有相关的都要测试
* 优化 solon-net-httputils 确保 TextStreamUtil:onSseStreamRequestDo 只会有一次触发 onComplete
* 优化 solon-web-rx RxSubscriberImpl 改为流控模式（只请求1，之前请求 max）//所有相关的都要测试
* 优化 solon-net-httputils sse 与背压处理的兼容性
* 修复 solon-net-httputils JdkHttpResponse:contentEncoding 不能获取 charset 的问题（并更名为 contentCharset，原名标为弃用）


## v3.5.2

#### 1、更新说明


* 添加 solon-ai-core ToolSchemaUtil 简化方法
* 添加 solon-ai-mcp McpClientProperties:timeout 属性，方便简化超时配置（可省略 httpTimeout, requestTimeout, initializationTimeout）
* 添加 solon-ai-mcp McpClientProvider:toolsChangeConsumer,resourcesChangeConsumer,resourcesUpdateConsumer,promptsChangeConsumer 配置支持
* 添加 solon-ai-mcp McpClientProvider 缓存锁和变更刷新控制
* 调整 solon-ai-core FunctionToolDesc:doHandle 改用 ToolHandler 参数类型（之前为 Function），方便传递异常



## v3.5.1

#### 1、更新说明

* 添加 solon-ai-mcp McpServerEndpointProvider:Builder 添加 context-path 配置
* 优化 solon-ai-mcp McpClientProvider 配置向 McpServers json 格式上靠
* 修复 solon-ai-core `think-> tool -> think` 时，工具调用的内容无法加入到对话的问题
* 修复 solon-ai-mcp 服务端传输层的会话长连会超时的问题
* 修复 solon-ai-mcp 客户端提供者心跳失效的问题
* 修复 solon-ai-mcp SSE 传输时 message 端点未附加 context-path 的问题
* mcp `McpSchema:*Capabilities` 添加 `@JsonIgnoreProperties(ignoreUnknown = true)` 增强跨协议版本兼容性


## v3.5.0 

#### 1、更新说明

* 新增 solon-ai-mcp MCP_2025-03-26 版本协议支持
* 调整 solon-ai-mcp channel 取消默认值（之前为 sse），且为必填（为兼容过度，有明确的开发时、启动时提醒）
  * 如果默认值仍为 sse ，升级后可能忘了修改了升级
  * 如果默认值改为 streamable，升级后会造成不兼容



```java
public interface McpChannel {
    String STDIO = "stdio";
    String SSE = "sse";               //MCP官方已标为弃用
    String STREAMABLE = "streamable"; //新增（MCP_2025-03-26 版本新增）
}
```

#### 2、兼容说明



* channel 取消默认值（之前为 sse），且为必填


提醒：SSE 与 STREAMABLE 不能互通（升级时，要注意这点）


#### 3、应用示例

for server （如果 channel 不加，默认为 streamable。之前默认为 sse）

```java
@McpServerEndpoint(channel=McpChannel.STREAMABLE, mcpEndpoint = "/mcp") 
public class McpServerTool {
    @ToolMapping(description = "查询天气预报")
    public String getWeather(@Param(description = "城市位置") String location) {
        return "晴，14度";
    }
}
```

client （如果 channel 不加，默认为 streamable。之前默认为 sse）

```java
McpClientProvider mcpClient = McpClientProvider.builder()
            .channel(McpChannel.STREAMABLE)
            .apiUrl("http://localhost:8081/mcp")
            .build();

//测试
String resp = mcpClient.callToolAsText("getWeather", Utils.asMap("location", "杭州")).getContent();
System.out.println(resp);


//对接 LLM
ChatModel chatModel = ChatModel.of(apiUrl).provider(...).model(...)
                .defaultToolsAdd(mcpClient) //绑定 mcp 工具
                .build();

ChatResponse resp = chatModel
        .prompt("今天杭州的天气情况？")
        .call();
```





## v3.3.0 更新与兼容说明



#### 兼容说明

* solon-ai Tool Call 相关接口有调整
* solon-ai-mcp 相关接口有调整

注意调整相关的内容

#### 具体更新
 
* 新增 solon-ai-repo-dashvector 插件
* 插件 solon-ai 三次预览
* 插件 solon-ai-mcp 二次预览
* 调整 solon-ai 移除 ToolParam 注解，改用 `Param` 注解（通用参数注解）
* 调整 solon-ai ToolMapping 注解移到 `org.noear.solon.ai.annotation`
* 调整 solon-ai FunctionToolDesc:param 改为 `paramAdd` 风格
* 调整 solon-ai MethodToolProvider 取消对 Mapping 注解的支持（利于跨生态体验的统一性）
* 调整 solon-ai 拆分为 solon-ai-core 和 solon-ai-model-dialects（方便适配与扩展）
* 调整 solon-ai 模型方言改为插件扩展方式
* 调整 solon-ai-mcp McpClientToolProvider 更名为 McpClientProvider（实现的接口变多了）
* 优化 solon-ai 允许 MethodFunctionTool,MethodFunctionPrompt,MethodFunctionResource 没有 solon 上下文的用况
* 优化 solon-ai-core `model.options(o->{})` 可多次调用
* 优化 solon-ai-mcp McpClientProvider 同时实现 ResourceProvider, PromptProvider 接口
* 优化 solon-ai-repo-redis metadataIndexFields 更名为 `metadataFields` （原名标为弃用）
* 添加 solon-ai-core ChatSubscriberProxy 用于控制外部订阅者，只触发一次 onSubscribe
* 添加 solon-ai-mcp McpClientProperties:httpProxy 配置
* 添加 solon-ai-mcp McpClientToolProvider isStarted 状态位（把心跳开始，转为第一次调用之后）
* 添加 solon-ai-mcp McpClientToolProvider:readResourceAsText,readResource,getPromptAsMessages,getPrompt 方法
* 添加 solon-ai-mcp McpServerEndpointProvider:getVersion,getChannel,getSseEndpoint,getTools,getServer 方法
* 添加 solon-ai-mcp McpServerEndpointProvider:addResource,addPrompt 方法
* 添加 solon-ai-mcp McpServerEndpointProvider:Builder:channel 方法
* 添加 solon-ai-mcp ResourceMapping 和 PromptMapping 注解（支持资源与提示语服务）
* 添加 solon-ai-mcp McpServerEndpoint AOP 支持（可支持 solono auth 注解鉴权）
* 添加 solon-ai-mcp McpServerEndpoint 实体参数支持（可支持 solon web 的实体参数、注解相通）
* 添加 solon-ai-mpc `Tool.returnDirect` 属性透传（前后端都有 solon-ai 时有效，目前还不是规范）
