### 1、纪年

* v0: 2018 ~ 2019 (2y)
* v1: 2020 ~ 2022 (3y)
* v2: 2023 ~ 2024 (2y)
* v3: 2024 ~ 2026 (1.5y)
* v4: 2026 ~ 

### 2、v3.x 升到 v4.x 提醒

* 提醒1：之前没有使用弃用接口的，可以直接升级 <br>
* 提醒2：有使用弃用接口的。建议先升级到 3.10.7；替换弃用代码后，再升级到 4.0.0




### 3、弃用配置移除对应表（要认真核对）


移除

| 应用或插件 | 移除配置名 | | 替代配置名 |
| -------- | -------- | -------- | -------- |
|   solon-server                | `server.session.state.domain`            |       | `server.session.cookieDomain`     |
|                                    | `server.session.state.domain.auto`     |       | `server.session.cookieDomainAuto`     |
|   solon-web-staticfiles    | `solon.staticfiles.maxAge`                |       | `solon.staticfiles.cacheMaxAge`     |
|   nacos2-solon-cloud-plugin    | `solon.cloud.nacos2.*`                |       | `solon.cloud.nacos.*`     |


### 4、弃用插件移除对应表（要认真核对）


移除（以下插件已由项目官方仓库维护，或者直接使用即可）

|  移除插件 | | 替代插件 |
| -------- | -------- | -------- | 
| `easy-trans-solon-plugin`  |   | `com.fhs-opensource:easy-trans-solon-plugin`  | 
| `sms4j-solon-plugin`  |   |  `org.dromara.sms4j:sms4j-solon-plugin` | 
| `beetlsql-solon-plugin`  |   | `com.ibeetl:sql-solon-plugin`  | 
| `dbvisitor-solon-plugin`  |   | `net.hasor:dbvisitor-solon`  | 
| `sqltoy-solon-plugin`  |   |  `com.sagframe:sagacity-sqltoy-solon-plugin` | 
| `mybatis-sqlhelper-solon-plugin`  |   |  `com.github.fangjinuo.sqlhelper:sqlhelper-mybatis` | 
| `mybatis-pagehelper-solon-plugin`  |   | `com.github.pagehelper:pagehelper`  | 
| `mybatis-plus-solon-plugin`  |   | `com.baomidou:mybatis-plus-solon-plugin`  | 
| `mybatis-plus-extension-solon-plugin`  |   | 同上  | 
| `mybatis-flex-solon-plugin`  |   | `com.mybatis-flex:mybatis-flex-solon-plugin`  | 
| `fastmybatis-solon-plugin`  |   | `net.oschina.durcframework:fastmybatis-solon-plugin`  | 
| `bean-searcher-solon-plugin`  |   | `cn.zhxu:bean-searcher-solon-plugin`  | 
| `mybatis-tkmapper-solon-plugin`  |   | `tk.mybatis:mapper-solon-plugin`  | 
| `sa-token-solon-plugin`  |   | `cn.dev33:sa-token-solon-plugin`  | 
| `sa-token-snack4`  |   | 同上  | 
| `sa-token-dao-redisson-jackson`  |   |  同上  | 
| `liteflow-solon-plugin`  |   | `com.yomahub:liteflow-solon-plugin`  | 
| `forest-solon-plugin`  |   | `com.dtflys.forest:forest-solon-plugin`  | 


### 5、弃用注解或属性移除对应表（会有编译提醒）

移除注解或属性

| 应用或插件 | 弃用注解或属性 | | 替代注解或属性 |
| -------- | -------- | -------- | -------- |
| solon      | `org.noear.solon.annotation::`     |      |      |
|              | `@Bean:priority()`          |      | `@Condition:priority()`    |
|              | `@Bean:injected()`          |      | `@Bean:autoInject()`    |
| solon-data      | `org.noear.solon.data.annotation::`     |      |      |
|              | `@Tran`          |      | `@Transaction`    |
| nami      | `org.noear.nami.annotation::`     |      |      |
|              | `@NamiBody:contentType()`          |      | `@NamiMapping:headers()`    |



### 6、Solon 生态弃用类或方法移除对应表（会有编译提醒）

* solon 移除类或方法

| 应用或插件 | 移除类或方法名 | | 替代类或方法名 |
| -------- | -------- | -------- | -------- |
| solon      | 包（`org.noear.solon`）      |      |      |
|              | `Solon:start(NvMap)`          |      | /     |
|              | `SolonApp:add*()`     |      | `SolonApp:router():add*()`     |
|              | `SolonApp:filter*()`     |      | `SolonApp:router():filter*()`     |
|              | `SolonApp:get*()`      |      | `SolonApp:router():get*()`     |
|              | `SolonApp:post*()`     |      | `SolonApp:router():post*()`     |
|              | `SolonApp:head*()`     |      | `SolonApp:router():head*()`     |
|              | `SolonApp:put*()`     |      | `SolonApp:router():put*()`     |
|              | `SolonApp:patch*()`     |      | `SolonApp:router():patch*()`     |
|              | `SolonApp:delete*()`     |      | `SolonApp:router():delete*()`     |
|              | `SolonApp:socketd*()`     |      | `SolonApp:router():socketd*()`     |
|              | `SolonApp:delete*()`     |      | `SolonApp:router():delete*()`     |
|              | `SolonApp:converterManager()`     |      | `SolonApp:converters()`     |
|              | `SolonApp:serializerManager()`     |      | `SolonApp:serializers()`     |
|              | `SolonApp:renderManager()`     |      | `SolonApp:renders()`     |
|              | `SolonApp:factoryManager()`     |      | `SolonApp:factories()`     |
|              | `SolonApp:renderManager()`     |      | `SolonApp:renders()`     |
|              | `SolonApp:chainManager()`     |      | `SolonApp:chains()`     |
|              | `SolonProps:plugs*()`          |      | `SolonProps:plugins*()`     |
|              | `SolonProps:plugsSort*()`          |      | /     |
|              | `SolonProps:isAloneMode*()`          |      | /     |
|              | `Utils:async*()`          |      | `RunUtil:async*()`     |
| solon      | 包（`org.noear.solon.util`）     |      |      |
|              | /          |      | `ScopeLocal:getOr`    |
| solon      | 包（`org.noear.solon.core`）      |      |      |
|              | `AppContext:methodGet`          |      | `AppContext:methodWrap`     |
|              | `AppContext:prestop`          |      | `AppContext:preStop`     |
|              | `BeanContainer:wrapPublish`          |      | `BeanContainer:beanPublish`     |
|              | `Constants:HEADER_CONTENT_TYPE_DEF`          |      | `MimeType.TEXT_PLAIN_UTF8_VALUE`     |
|              | `ChainManager:getInterceptorNodes`          |      | `ChainManager:getRouterInterceptorNodes`    |
|              | `ChainManager:addInterceptor`          |      | `ChainManager:addRouterInterceptor`    |
|              | `ChainManager:addInterceptorIfAbsent`          |      | `ChainManager:addRouterInterceptorIfAbsent`    |
|              | `ChainManager:removeInterceptor`          |      | `ChainManager:removeRouterInterceptor`    |
|              | `ChainManager:defExecuteHandler`          |      | `ChainManager:defEntityConverter`    |
|              | `ChainManager:addExecuteHandler`          |      | `ChainManager:addEntityConverter`    |
|              | `ChainManager:removeExecuteHandler`          |      | `ChainManager:removeEntityConverter`    |
|              | `ChainManager:getExecuteHandler`          |      | /   |
|              | `ChainManager:getExecuteHandlerDefault`          |      | /    |
|              | `FactoryManager:hasMvcFactory()`          |      | /    |
|              | `FactoryManager:mvcFactory()`          |      | /    |
|              | `FactoryManager:mvcFactory()`          |      | /    |
|              | `Plugin:prestop()`          |      | `Plugin:preStop()`     |
|              | `new Props(Map)`          |      | `new Props().addAll(Map)`     |
|              | `new Props(Iterable<KeyValues>)`          |      | `new Props().addAll(Iterable<KeyValues>)`     |
|              | `Props:getBean(..)`          |      | `Props:toBean(..)`     |
|              | `VarHolder:getGenericType()->ParameterizedType`          |      | `VarHolder:getGenericType()->Type`    |
|              | `NvMap`          |      | /     |
|              | `MvcFactory`          |      | /     |
|              | `LifecycleIndex`          |      | /     |
| solon      | 包（`org.noear.solon.core.handle`）      |      |      |
|              | `ActionArgumentResolver`          |      | `MethodArgumentResolver`     |
|              | `ActionExecuteHandler`          |      | /     |
|              | `ContextHolder`          |      | /     |
|              | `ContextUtil`          |      | /     |
|              | `EntityConverterFromExecutor`          |      | /     |
|              | `RenderFactory`          |      | /     |
| solon      | 包（`org.noear.solon.core.route`）      |      |      |
|              | `Router:getAll(..)`          |      | `Router:findAll(...)`     |
|              | `Router:getBy(..)`          |      | `Router:findBy(...)`     |
|              | `RouterWrapper`          |      | /    |
|              | `Routing:target()`          |      | `Routing:target(version2)`    |
|              | `RoutingTable:matchOne(..)`          |      | `RoutingTable:matchOne(..., version)`     |
|              | `RoutingTable:matchOneAndStatus(..)`          |      | `RoutingTable:matchOneAndStatus(..., version)`     |
|              | `RoutingTable:matchMore(..)`          |      | `RoutingTable:matchMore(..., version)`     |
| solon      | 包（`org.noear.solon.core.util`）      |      |      |
|              | `ClassUtil:findPublicMethods(..)`          |      | /     |
|              | `ClassUtil:scanClasses(.., Predicate<Class<?>>)`          |      | `ClassUtil:scanClasses(.., Consumer<Class<?>>)`     |
|              | `ResourceUtil:scanClasses(..)`          |      | `ClassUtil:scanClasses(...)`     |
|              | `ScanUtil:setScanner(..)`          |      | /     |
|              | `LogUtil`          |      | /     |
|              | `PathAnalyzer`          |      | PathMatcher     |
| solon      | 包（`org.noear.solon.core.wrap`）      |      |      |
|              | `VarSpec:getType`          |      | `VarSpec:getTypeEggg().getType`      |
|              | `VarSpec:getGenericType`          |      | `VarSpec:getTypeEggg().getGenericType`      |
|              | `VarSpec:isGenericType`          |      | `VarSpec:getTypeEggg().isParameterizedType`      |


* solon-handle 移除类或方法

| 应用或插件 | 移除类或方法名 | | 替代类或方法名 |
| -------- | -------- | -------- | -------- |
| solon-handle      | 包（`org.noear.solon.core.mvc`）      |      |      |
|              | `ActionExecuteHandlerDefault`          |      | `EntityConverterDefault`     |


* solon-data 移除类或方法

| 应用或插件 | 移除类或方法名 | | 替代类或方法名 |
| -------- | -------- | -------- | -------- |
| solon-data      | 包（`org.noear.solon.data.tran`）      |      |      |
|              | `TranManager:currentSet`          |      | `TranManager:with`    |
|              | `TranManager:currentRemove`    |      | `TranManager:with`     |
|              | `TranManager:trySuspend`          |      | `TranManager:with`     |
|              | `TranManager:tryResume`           |      | `TranManager:with`     |
| solon-data      | 包（`org.noear.solon.data.tran.interceptor`）      |      |      |
|              | `TranInterceptor`          |      | `TransactionInterceptor`     |


* solon-data-dynamicds 移除类或方法

| 应用或插件 | 移除类或方法名 | | 替代类或方法名 |
| -------- | -------- | -------- | -------- |
| solon-data-dynamicds      | 包（`org.noear.solon.data.dynamicds`）      |      |      |
|              | `DynamicDataSource:setCurrentKey`          |      | `DynamicDsKey:use`    |
|              | `DynamicDsKey:remove`          |      | `DynamicDsKey:with`      |
|              | `DynamicDsKey:use`           |      | `DynamicDsKey:with`      |
|              | `DynamicDsKey:getCurrent`           |      | `DynamicDsKey:with`      |
|              | `DynamicDsKey:setCurrent`           |      | `DynamicDsKey:with`      |
|              | `DynamicDsUtils`           |      | /     |




* solon-flow 移除类或方法

| 应用或插件 | 移除类或方法名 | | 替代类或方法名 |
| -------- | -------- | -------- | -------- |
| solon-flow      | 包（`org.noear.solon.flow`）      |      |      |
|              | `FlowContext:model()`          |      | `FlowContext:data()`    |
|              | `FlowContext:vars()`          |      | `FlowContext:data()`    |
|              | `Link:getCondition`          |      | `Link:getWhen`      |
|              | `LinkSpec:condition`           |      | `LinkSpec:when`      |




* solon-net-httputils 移除类或方法

| 应用或插件 | 移除类或方法名 | | 替代类或方法名 |
| -------- | -------- | -------- | -------- |
| solon-net-httputils      | 包（`org.noear.solon.net.http.textstream`）      |      |      |
|              | `ServerSentEvent:id()`          |      | `ServerSentEvent:getId()`    |
|              | `ServerSentEvent:event()`          |      | `ServerSentEvent:getEvent()`    |
|              | `ServerSentEvent:data()`          |      | `ServerSentEvent:getData()`    |
|              | `ServerSentEvent:retry()`          |      | `ServerSentEvent:getRetry()`    |
|              | `ServerSentEvent:comment()`          |      | `ServerSentEvent:getComment()`    |
|              | `TextStreamUtil:parseLineStream(.., subscriber)`          |      | `TextStreamUtil:parseLineStream(...)->Flux`    |
|              | `TextStreamUtil:parseSseStream(.., subscriber)`          |      | `TextStreamUtil:parseSseStream(...)->Flux`    |
| solon-net-httputils      | 包（`org.noear.solon.net.http`）      |      |      |
|              | `HttpExtensionManager`          |      | `HttpConfiguration`    |
|              | `HttpResponse:contentEncoding`          |      | `HttpResponse:contentCharset`    |
|              | `HttpUtils:execAsTextStream`          |      | `HttpUtils:execAsLineStream`    |
|              | `HttpUtils:execAsEventStream`          |      | `HttpUtils:execAsSseStream`    |
|              | `HttpUtils:bodyRaw`          |      | `HttpUtils:body`    |
|              | `HttpUtils:bodyTxt`          |      | `HttpUtils:bodyOfTxt`    |
|              | `HttpUtils:bodyJson`          |      | `HttpUtils:bodyOfJson`    |



* solon-statemachine 移除类或方法

| 应用或插件 | 移除类或方法名 | | 替代类或方法名 |
| -------- | -------- | -------- | -------- |
| solon-statemachine      | 包（`org.noear.solon.statemachine`）      |      |      |
|              | `Event`          |      | /     |
|              | `State`          |      | /     |


* solon-server 移除类或方法

| 应用或插件 | 移除类或方法名 | | 替代类或方法名 |
| -------- | -------- | -------- | -------- |
| solon-server      | 包（`org.noear.solon.server.ssl`）      |      |      |
|              | `SslContextFactory`          |      | `SslContextBuilder`     |
| solon-server      | 包（`org.noear.solon.server`）      |      |      |
|              | `ServerProps.request_useTempfile`          |      | /     |


* solon-serialization 移除类或方法

| 应用或插件 | 移除类或方法名 | | 替代类或方法名 |
| -------- | -------- | -------- | -------- |
| solon-serialization      | 包（`org.noear.solon.serialization.prop`）      |      |      |
|              | `JsonPropsUtil`          |      | /     |
| solon-serialization      | 包（`org.noear.solon.serialization`）      |      |      |
|              | `BytesSerializerRender`          |      | /     |
|              | `ContextSerializer`          |      | /     |
|              | `JsonRenderFactory`          |      | /     |
|              | `BytesSerializerRender`          |      | /     |
|              | `StringSerializerRender`          |      | /     |
| solon-serialization-abc      | 包（`org.noear.solon.serialization.abc`）      |      |      |
|              | `AbcActionExecutor`          |      | /     |
|              | `AbcRender`          |      | /     |
| solon-serialization-fastjson      | 包（`org.noear.solon.serialization.fastjson`）      |      |      |
|              | `FastjsonActionExecutor`          |      | /     |
|              | `FastjsonRenderFactory`          |      | /     |
|              | `FastjsonRenderFactoryBase`          |      | /     |
|              | `FastjsonRenderTypedFactory`          |      | /     |
| solon-serialization-fastjson2      | 包（`org.noear.solon.serialization.fastjson2`）      |      |      |
|              | `Fastjson2ActionExecutor`          |      | /     |
|              | `Fastjson2RenderFactory`          |      | /     |
|              | `Fastjson2RenderFactoryBase`          |      | /     |
|              | `Fastjson2RenderTypedFactory`          |      | /     |
| solon-serialization-fury      | 包（`org.noear.solon.serialization.fury`）      |      |      |
|              | `FuryActionExecutor`          |      | /     |
|              | `FuryRender`          |      | /     |
| solon-serialization-gson      | 包（`org.noear.solon.serialization.gson`）      |      |      |
|              | `GsonActionExecutor`          |      | /     |
|              | `GsonRenderFactory`          |      | /     |
|              | `GsonRenderFactoryBase`          |      | /     |
|              | `GsonRenderTypedFactory`          |      | /     |
| solon-serialization-hessian      | 包（`org.noear.solon.serialization.hessian`）      |      |      |
|              | `HessianActionExecutor`          |      | /     |
|              | `HessianRender`          |      | /     |
| solon-serialization-jackson      | 包（`org.noear.solon.serialization.jackson`）      |      |      |
|              | `JacksonActionExecutor`          |      | /     |
|              | `JacksonRenderFactory`          |      | /     |
|              | `JacksonRenderFactoryBase`          |      | /     |
|              | `JacksonRenderTypedFactory`          |      | /     |
| solon-serialization-jackson-xml      | 包（`org.noear.solon.serialization.jackson.xml`）      |      |      |
|              | `JacksonXmlActionExecutor`          |      | /     |
|              | `JacksonXmlRenderFactory`          |      | /     |
|              | `JacksonXmlRenderFactoryBase`          |      | /     |
|              | `JacksonXmlRenderTypedFactory`          |      | /     |
| solon-serialization-kryo      | 包（`org.noear.solon.serialization.kryo`）      |      |      |
|              | `KryoActionExecutor`          |      | /     |
|              | `KryoRender`          |      | /     |
| solon-serialization-properties      | 包（`org.noear.solon.serialization.properties`）      |      |      |
|              | `PropertiesActionExecutor`          |      | /     |
|              | `PropertiesRenderFactory`          |      | /     |
| solon-serialization-protostuff      | 包（`org.noear.solon.serialization.protostuff`）      |      |      |
|              | `ProtostuffActionExecutor`          |      | /     |
|              | `ProtostuffRender`          |      | /     |
| solon-serialization-snack3      | 包（`org.noear.solon.serialization.snack3`）      |      |      |
|              | `SnackActionExecutor`          |      | /     |
|              | `SnackRenderFactory`          |      | /     |
|              | `SnackRenderFactoryBase`          |      | /     |
|              | `SnackRenderTypedFactory`          |      | /     |




* solon-web 移除类或方法

| 应用或插件 | 移除类或方法名 | | 替代类或方法名 |
| -------- | -------- | -------- | -------- |
| solon-web-sse      | 包（`org.noear.solon.web.sse`）      |      |      |
|              | `SseEvent:build`          |      | `SseEvent:toString`     |




* solon-integration 移除类或方法

| 应用或插件 | 移除类或方法名 | | 替代类或方法名 |
| -------- | -------- | -------- | -------- |
| dubbo3-solon-plugin      |  包（`org.noear.solon.extend.dubbo3`）     |      |      |
|                           | `EnableDubbo`          |      | `org.apache.dubbo.solon.annotation.EnableDubbo`     |
| dubbo-solon-plugin      |  包（`org.noear.solon.extend.dubbo`）     |      |      |
|                           | `EnableDubbo`          |      | `org.apache.dubbo.solon.annotation.EnableDubbo`     |
| redisson-solon-plugin      | 包（`org.redisson.solon`）       |      |      |
|                           | `RedissonSupplier`          |      | `RedissonClientOriginalSupplier`     |


* nami 移除类或方法

| 应用或插件 | 移除类或方法名 | | 替代类或方法名 |
| -------- | -------- | -------- | -------- |
| nami      | 包（`org.noear.nami`）      |      |      |
|              | `EncoderTyped`          |      | /     |
|              | `NamiAttachment`          |      | `NamiAttach`     |
|              | `EncoderTyped`          |      | /     |
| nami      | 包（`org.noear.nami.common`）      |      |      |
|              | `Constants`          |      | `ContentTypes`     |
| nami-coder-fastjson      | 包（`org.noear.nami.coder.fastjson`）      |      |      |
|              | `FastjsonTypeEncoder`          |      | /    |
| nami-coder-fastjson2      | 包（`org.noear.nami.coder.fastjson2`）      |      |      |
|              | `Fastjson2TypeEncoder`          |      | /    |
| nami-coder-jackson      | 包（`org.noear.nami.coder.jackson`）      |      |      |
|              | `JacksonTypeEncoder`          |      | /    |
| nami-coder-snack3      | 包（`org.noear.nami.coder.snack3`）      |      |      |
|              | `SnackTypeEncoder`          |      | /    |




### 7、Solon AI 生态弃用类或方法移除对应表（会有编译提醒）


* solon-ai-core 移除类或方法

| 应用或插件 | 移除类或方法名 | | 替代类或方法名 |
| -------- | -------- | -------- | -------- |
| solon-ai-core      | 包（`org.noear.solon.ai.core`）      |      |      |
|              | `ChatMessage.template()`          |      | `ChatMessage.ofUserTmpl()`       |
|              | `ChatMessage.augment()`          |      | `ChatMessage.ofUserAugment()`       |
|              | `UserMessageTemplate.param()`          |      | `UserMessageTemplate.paramAdd()`       |
|              | `InMemoryChatSession:new(..,systemMessages)`          |      | /        |
|              | `InMemoryChatSession.Builder.systemMessages()`          |      | /      |
|              | `ToolCallResultConverter.matched()`          |      | /       |
|              | `ChatConfig.defaultToolsContext`           |      | `ChatConfig.defaultToolContext` （配置要注意）      |
|              | `ChatConfig.addDefaultTools()`               |      | `ChatConfig.addDefaultTool()`     |
|              | `ChatConfig.isDefaultAutoToolCall()`      |      | `ChatConfig.getModelOptions().isAutoToolCall()`      |
|              | `ChatConfig.getDefaultInterceptors()`      |      | `ChatConfig.getModelOptions().interceptors()`      |
|              | `ChatConfig.getDefaultToolContext()`      |      | `ChatConfig.getModelOptions().toolContext()`      |
|              | `ChatConfig.getDefaultSkills()`                |      | `ChatConfig.getModelOptions().skills()`      |
|              | `ChatConfig.getDefaultOptions()`                |      | `ChatConfig.getModelOptions().options()`      |
|              | `ChatConfig.getDefaultTool()`                |      | `ChatConfig.getModelOptions().tool()`      |
|              | `ChatConfig.getDefaultTools()`                |      | `ChatConfig.getModelOptions().tools()`      |
|              | `ChatConfig.getDefaultToolsContext()`                |      | `ChatConfig.getModelOptions().toolContext()`      |
|              | `ChatModel.prompt(session)`          |      | /       |
|              | `ChatModel.defaultToolAdd(toolObj)`          |      | /       |
|              | `ChatOptions.optionAdd()`                |      | `ChatOptions.optionSet()`     |
|              | `ChatOptions.toolsAdd()`                |      | `ChatOptions.toolAdd()`     |
|              | `ChatOptions.toolsContext()`                |      | `ChatOptions.toolContext()`     |
|              | `ChatOptions.toolsAdd()`                |      | `ChatOptions.toolAdd()`     |
|              | `ChatSession.toNdjson()`                |      | `ChatMessage.toNdjson(session.getMessages())`     |
|              | `ChatSession.loadNdjson()`                |      | `ChatMessage.fromNdjson(ndjson, session::addMessage)`     |
|              | `ChatSessionDefault`                |      | /     |
|              | `EmbeddingOptions.optionAdd()`                |      | `EmbeddingOptions.optionSet()`     |
|              | `GenerateOptions.optionAdd()`                |      | `GenerateOptions.optionSet()`     |
|              | `RerankingOptions.optionAdd()`                |      | `RerankingOptions.optionSet()`     |
|              | `RepositoryStorable.asyncInsert()`                |      | `RepositoryStorable.asyncSave()`     |
|              | `RepositoryStorable.insert()`                |      | `RepositoryStorable.save()`     |
|              | `RepositoryStorable.delete()`                |      | `RepositoryStorable.deleteById()`     |
|              | `RepositoryStorable.exists()`                |      | `RepositoryStorable.existsById()`     |


* solon-ai-agent 移除类或方法

| 应用或插件 | 移除类或方法名 | | 替代类或方法名 |
| -------- | -------- | -------- | -------- |
| solon-ai-agent      | 包（`org.noear.solon.ai.agent`）      |      |      |
|              | `ReActAgent.description()`          |      | `ReActAgent.role()`       |
|              | `ReActAgent.maxStepsExtensible()`          |      | `ReActAgent.autoRethink()`       |
|              | `ReActOptionsAmend.maxStepsExtensible()`          |      | `ReActOptionsAmend.autoRethink()`       |
|              | `ReActTrace.pending()`          |      | `AgentSession.pending()`        |
|              | `ReActTrace.isPending()`          |      | `AgentSession.isPending()`       |
|              | `ReActTrace.getPendingReason()`          |      | `AgentSession.getPendingReason()`       |
|              | `SimpleAgent.description()`          |      | `SimpleAgent.role()`       |
|              | `TeamAgent.description()`          |      | `TeamAgent.role()`       |
|              | `TeamTrace.pending()`          |      | `AgentSession.pending()`        |
|              | `TeamTrace.isPending()`          |      | `AgentSession.isPending()`       |
|              | `TeamTrace.getPendingReason()`          |      | `AgentSession.getPendingReason()`       |



* solon-ai-harness 移除类或方法

| 应用或插件 | 移除类或方法名 | | 替代类或方法名 |
| -------- | -------- | -------- | -------- |
| solon-ai-harness      | 包（`org.noear.solon.ai.harness`）      |      |      |
|              | `HarnessEngine.Builder.extensionAdd()`          |      | /       |
|              | `HarnessProperties.maxStepsAutoExtensible()`          |      | `HarnessProperties.autoRethink()`       |




* solon-ai-mcp 移除类或方法

| 应用或插件 | 移除类或方法名 | | 替代类或方法名 |
| -------- | -------- | -------- | -------- |
| solon-ai-mcp      | 包（`org.noear.solon.ai.mcp`）      |      |      |
|              | `McpClientProperties.apiKey("xxx")`          |      | `.header("Authorization", "Bearer xxx")`       |
|              | `McpClientProperties.apiUrl()`          |      | `McpClientProperties.url()`       |
|              | `McpClientProvider.Builder.apiUrl()`          |      | `McpClientProvider.Builder.url()`       |
|              | `McpClientProvider.Builder.apiKey()`          |      | `McpClientProvider.Builder.header("Authorization", "Bearer xxx")`       |
|              | `McpClientProvider.Builder.headerSet()`          |      | `McpClientProvider.Builder.header()`       |
|              | `McpClientProvider.Builder.serverParameters()`          |      | `McpClientProvider.Builder.command()`       |
|              | `McpServerParameters.Builder`          |      | /       |


* solon-ai-repo 移除类或方法

| 应用或插件 | 移除类或方法名 | | 替代类或方法名 |
| -------- | -------- | -------- | -------- |
| solon-ai-repo-dashvector      | 包（`org.noear.solon.ai.rag.repository`）      |      |      |
|              | `DashVectorRepository.metadataIndexFields()`          |      | `DashVectorRepository.metadataFields()`       |
| solon-ai-repo-redis      | 包（`org.noear.solon.ai.rag.repository`）      |      |      |
|              | `RedisRepository.metadataIndexFields()`          |      | `RedisRepository.metadataFields()`       |

