springbootAI 2.3.9__tar.gz → 2.3.11__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (376) hide show
  1. {springbootai-2.3.9 → springbootai-2.3.11}/CHANGELOG.md +19 -0
  2. {springbootai-2.3.9/springbootAI.egg-info → springbootai-2.3.11}/PKG-INFO +13 -10
  3. {springbootai-2.3.9 → springbootai-2.3.11}/README.md +10 -8
  4. {springbootai-2.3.9 → springbootai-2.3.11}/pyproject.toml +85 -49
  5. springbootai-2.3.11/requirements-ai.txt +44 -0
  6. {springbootai-2.3.9 → springbootai-2.3.11}/requirements.txt +1 -6
  7. {springbootai-2.3.9 → springbootai-2.3.11/springbootAI.egg-info}/PKG-INFO +13 -10
  8. {springbootai-2.3.9 → springbootai-2.3.11}/springbootAI.egg-info/SOURCES.txt +7 -0
  9. {springbootai-2.3.9 → springbootai-2.3.11}/springbootAI.egg-info/requires.txt +1 -0
  10. {springbootai-2.3.9 → springbootai-2.3.11}/springbootai/__init__.py +1 -1
  11. {springbootai-2.3.9 → springbootai-2.3.11}/springbootai/ai/__init__.py +5 -4
  12. {springbootai-2.3.9 → springbootai-2.3.11}/springbootai/ai/advisors.py +102 -10
  13. {springbootai-2.3.9 → springbootai-2.3.11}/springbootai/ai/annotation_runtime.py +138 -18
  14. {springbootai-2.3.9 → springbootai-2.3.11}/springbootai/ai/annotations.py +27 -5
  15. {springbootai-2.3.9 → springbootai-2.3.11}/springbootai/ai/autoconfig.py +105 -24
  16. springbootai-2.3.11/springbootai/ai/core.py +1076 -0
  17. {springbootai-2.3.9 → springbootai-2.3.11}/springbootai/ai/memory.py +79 -15
  18. {springbootai-2.3.9 → springbootai-2.3.11}/springbootai/ai/observability.py +5 -3
  19. {springbootai-2.3.9 → springbootai-2.3.11}/springbootai/ai/providers.py +211 -49
  20. {springbootai-2.3.9 → springbootai-2.3.11}/springbootai/ai/resilience.py +186 -8
  21. {springbootai-2.3.9 → springbootai-2.3.11}/springbootai/ai/tools.py +268 -20
  22. springbootai-2.3.11/springbootai/ai/vectorstore.py +719 -0
  23. {springbootai-2.3.9 → springbootai-2.3.11}/springbootai/annotations/cache.py +2 -1
  24. {springbootai-2.3.9 → springbootai-2.3.11}/springbootai/annotations/core.py +1 -1
  25. {springbootai-2.3.9 → springbootai-2.3.11}/springbootai/annotations/data.py +13 -1
  26. {springbootai-2.3.9 → springbootai-2.3.11}/springbootai/annotations/enterprise.py +7 -7
  27. {springbootai-2.3.9 → springbootai-2.3.11}/springbootai/annotations/security.py +1 -1
  28. {springbootai-2.3.9 → springbootai-2.3.11}/springbootai/aop/cloud_aop.py +62 -4
  29. springbootai-2.3.11/springbootai/aop/comprehensive_aop.py +1237 -0
  30. {springbootai-2.3.9 → springbootai-2.3.11}/springbootai/cli/main.py +1 -1
  31. {springbootai-2.3.9 → springbootai-2.3.11}/springbootai/cli/scaffold.py +5 -1
  32. {springbootai-2.3.9 → springbootai-2.3.11}/springbootai/cloud/__init__.py +10 -2
  33. {springbootai-2.3.9 → springbootai-2.3.11}/springbootai/cloud/bus.py +226 -59
  34. {springbootai-2.3.9 → springbootai-2.3.11}/springbootai/cloud/config_center.py +3 -3
  35. {springbootai-2.3.9 → springbootai-2.3.11}/springbootai/cloud/discovery.py +39 -21
  36. {springbootai-2.3.9 → springbootai-2.3.11}/springbootai/cloud/feign.py +28 -2
  37. {springbootai-2.3.9 → springbootai-2.3.11}/springbootai/cloud/gateway.py +328 -108
  38. {springbootai-2.3.9 → springbootai-2.3.11}/springbootai/cloud/nacos_config.py +6 -2
  39. {springbootai-2.3.9 → springbootai-2.3.11}/springbootai/cloud/seata.py +48 -1
  40. springbootai-2.3.11/springbootai/cloud/seata_at_proxy.py +847 -0
  41. {springbootai-2.3.9 → springbootai-2.3.11}/springbootai/cloud/tracer.py +103 -56
  42. {springbootai-2.3.9 → springbootai-2.3.11}/springbootai/config/binding.py +3 -1
  43. {springbootai-2.3.9 → springbootai-2.3.11}/springbootai/config/config_loader.py +3 -3
  44. {springbootai-2.3.9 → springbootai-2.3.11}/springbootai/config/spring-configuration-metadata.json +45 -20
  45. {springbootai-2.3.9 → springbootai-2.3.11}/springbootai/context/application_context.py +20 -5
  46. {springbootai-2.3.9 → springbootai-2.3.11}/springbootai/context/bean_factory.py +185 -140
  47. {springbootai-2.3.9 → springbootai-2.3.11}/springbootai/core/graceful_shutdown.py +3 -1
  48. {springbootai-2.3.9 → springbootai-2.3.11}/springbootai/csv/__init__.py +1 -1
  49. {springbootai-2.3.9 → springbootai-2.3.11}/springbootai/data/__init__.py +1 -1
  50. {springbootai-2.3.9 → springbootai-2.3.11}/springbootai/data/repository.py +113 -27
  51. {springbootai-2.3.9 → springbootai-2.3.11}/springbootai/data/rest.py +140 -39
  52. {springbootai-2.3.9 → springbootai-2.3.11}/springbootai/datasource/__init__.py +1 -1
  53. {springbootai-2.3.9 → springbootai-2.3.11}/springbootai/datasource/dynamic.py +5 -1
  54. springbootai-2.3.11/springbootai/event/publisher.py +103 -0
  55. {springbootai-2.3.9 → springbootai-2.3.11}/springbootai/excel/__init__.py +1 -1
  56. {springbootai-2.3.9 → springbootai-2.3.11}/springbootai/i18n/__init__.py +1 -1
  57. {springbootai-2.3.9 → springbootai-2.3.11}/springbootai/langchain/__init__.py +2 -2
  58. {springbootai-2.3.9 → springbootai-2.3.11}/springbootai/langchain/adapters.py +6 -2
  59. {springbootai-2.3.9 → springbootai-2.3.11}/springbootai/langchain/autoconfig.py +10 -4
  60. springbootai-2.3.11/springbootai/langchain/loaders/loaders.py +440 -0
  61. {springbootai-2.3.9 → springbootai-2.3.11}/springbootai/langchain/partners.py +3 -1
  62. {springbootai-2.3.9 → springbootai-2.3.11}/springbootai/langchain/tools/tools.py +32 -4
  63. {springbootai-2.3.9 → springbootai-2.3.11}/springbootai/langgraph/autoconfig.py +10 -4
  64. {springbootai-2.3.9 → springbootai-2.3.11}/springbootai/langgraph/config.py +36 -3
  65. {springbootai-2.3.9 → springbootai-2.3.11}/springbootai/langgraph/runtime.py +292 -51
  66. {springbootai-2.3.9 → springbootai-2.3.11}/springbootai/logging/context.py +8 -3
  67. {springbootai-2.3.9 → springbootai-2.3.11}/springbootai/main.py +102 -44
  68. {springbootai-2.3.9 → springbootai-2.3.11}/springbootai/mcp/autoconfig.py +3 -1
  69. {springbootai-2.3.9 → springbootai-2.3.11}/springbootai/mcp/client.py +295 -38
  70. {springbootai-2.3.9 → springbootai-2.3.11}/springbootai/mcp/config.py +37 -0
  71. springbootai-2.3.11/springbootai/messaging/kafka.py +552 -0
  72. springbootai-2.3.11/springbootai/messaging/rabbitmq.py +925 -0
  73. {springbootai-2.3.9 → springbootai-2.3.11}/springbootai/monitoring/prometheus.py +24 -7
  74. {springbootai-2.3.9 → springbootai-2.3.11}/springbootai/orm/__init__.py +2 -0
  75. {springbootai-2.3.9 → springbootai-2.3.11}/springbootai/orm/database.py +190 -50
  76. {springbootai-2.3.9 → springbootai-2.3.11}/springbootai/orm/migration.py +328 -222
  77. {springbootai-2.3.9 → springbootai-2.3.11}/springbootai/orm/mybatis_integration.py +3 -1
  78. {springbootai-2.3.9 → springbootai-2.3.11}/springbootai/orm/pymybatis/__init__.py +4 -3
  79. {springbootai-2.3.9 → springbootai-2.3.11}/springbootai/orm/pymybatis/cache/redis_cache.py +226 -160
  80. {springbootai-2.3.9 → springbootai-2.3.11}/springbootai/orm/pymybatis/circuit_breaker/circuit_breaker.py +73 -23
  81. {springbootai-2.3.9 → springbootai-2.3.11}/springbootai/orm/pymybatis/configuration.py +3 -1
  82. {springbootai-2.3.9 → springbootai-2.3.11}/springbootai/orm/pymybatis/core/sql_session.py +1011 -49
  83. {springbootai-2.3.9 → springbootai-2.3.11}/springbootai/orm/pymybatis/dynamic_sql/dynamic_sql.py +25 -20
  84. {springbootai-2.3.9 → springbootai-2.3.11}/springbootai/orm/pymybatis/interceptor/interceptor.py +17 -12
  85. {springbootai-2.3.9 → springbootai-2.3.11}/springbootai/orm/pymybatis/pool/connection_pool.py +29 -86
  86. {springbootai-2.3.9 → springbootai-2.3.11}/springbootai/orm/pymybatis/security/__init__.py +7 -1
  87. {springbootai-2.3.9 → springbootai-2.3.11}/springbootai/orm/pymybatis/security/access_control.py +120 -47
  88. {springbootai-2.3.9 → springbootai-2.3.11}/springbootai/orm/pymybatis/security/sql_injection_detector.py +51 -21
  89. {springbootai-2.3.9 → springbootai-2.3.11}/springbootai/orm/pymybatis/transaction/transaction.py +41 -7
  90. {springbootai-2.3.9 → springbootai-2.3.11}/springbootai/orm/pymybatis/version.py +1 -1
  91. springbootai-2.3.11/springbootai/py.typed +1 -0
  92. {springbootai-2.3.9 → springbootai-2.3.11}/springbootai/retry/retry_decorator.py +55 -1
  93. {springbootai-2.3.9 → springbootai-2.3.11}/springbootai/scheduling/scheduler.py +230 -125
  94. {springbootai-2.3.9 → springbootai-2.3.11}/springbootai/security/jwt_utils.py +4 -2
  95. {springbootai-2.3.9 → springbootai-2.3.11}/springbootai/security/oauth2.py +178 -41
  96. {springbootai-2.3.9 → springbootai-2.3.11}/springbootai/security/replay_protection.py +94 -26
  97. {springbootai-2.3.9 → springbootai-2.3.11}/springbootai/security/security_aop.py +7 -2
  98. {springbootai-2.3.9 → springbootai-2.3.11}/springbootai/test/__init__.py +1 -1
  99. {springbootai-2.3.9 → springbootai-2.3.11}/springbootai/tx/__init__.py +1 -1
  100. {springbootai-2.3.9 → springbootai-2.3.11}/springbootai/tx/events.py +28 -2
  101. {springbootai-2.3.9 → springbootai-2.3.11}/springbootai/tx/synchronization.py +34 -13
  102. {springbootai-2.3.9 → springbootai-2.3.11}/springbootai/utils/banner.py +3 -3
  103. {springbootai-2.3.9 → springbootai-2.3.11}/springbootai/utils/redis_client.py +123 -68
  104. {springbootai-2.3.9 → springbootai-2.3.11}/springbootai/validation/__init__.py +1 -1
  105. {springbootai-2.3.9 → springbootai-2.3.11}/springbootai/web/actuator.py +140 -47
  106. {springbootai-2.3.9 → springbootai-2.3.11}/springbootai/web/csrf.py +40 -11
  107. springbootai-2.3.11/springbootai/web/exception_handler.py +101 -0
  108. {springbootai-2.3.9 → springbootai-2.3.11}/springbootai/web/health.py +108 -88
  109. {springbootai-2.3.9 → springbootai-2.3.11}/springbootai/web/interceptor.py +33 -15
  110. {springbootai-2.3.9 → springbootai-2.3.11}/springbootai/web/request_metrics.py +23 -5
  111. {springbootai-2.3.9 → springbootai-2.3.11}/springbootai/web/swagger.py +5 -5
  112. {springbootai-2.3.9 → springbootai-2.3.11}/springbootai/web/web_context.py +149 -12
  113. {springbootai-2.3.9 → springbootai-2.3.11}/springbootai/websocket/__init__.py +1 -1
  114. {springbootai-2.3.9 → springbootai-2.3.11}/springbootai/websocket/broker.py +108 -16
  115. {springbootai-2.3.9 → springbootai-2.3.11}/springbootai/websocket/handler.py +8 -4
  116. {springbootai-2.3.9 → springbootai-2.3.11}/springbootai/websocket/router.py +207 -20
  117. {springbootai-2.3.9 → springbootai-2.3.11}/springbootai/websocket/session.py +92 -39
  118. {springbootai-2.3.9 → springbootai-2.3.11}/tests/test_actuator_prometheus_admin.py +12 -8
  119. {springbootai-2.3.9 → springbootai-2.3.11}/tests/test_ai_comprehensive.py +105 -0
  120. {springbootai-2.3.9 → springbootai-2.3.11}/tests/test_ai_module.py +42 -7
  121. {springbootai-2.3.9 → springbootai-2.3.11}/tests/test_ai_stream_hardening.py +59 -0
  122. {springbootai-2.3.9 → springbootai-2.3.11}/tests/test_cloud_embedded_full.py +32 -0
  123. {springbootai-2.3.9 → springbootai-2.3.11}/tests/test_config_fixes_185.py +24 -0
  124. {springbootai-2.3.9 → springbootai-2.3.11}/tests/test_di_config_event_full.py +32 -0
  125. springbootai-2.3.11/tests/test_enterprise_safety_regressions.py +386 -0
  126. springbootai-2.3.11/tests/test_final_enterprise_hardening.py +452 -0
  127. springbootai-2.3.11/tests/test_followup_enterprise_fixes.py +422 -0
  128. {springbootai-2.3.9 → springbootai-2.3.11}/tests/test_io_http_logging_hardening.py +153 -5
  129. {springbootai-2.3.9 → springbootai-2.3.11}/tests/test_langchain_comprehensive.py +3 -1
  130. springbootai-2.3.11/tests/test_latest_enterprise_audit_fixes.py +267 -0
  131. {springbootai-2.3.9 → springbootai-2.3.11}/tests/test_mcp_module.py +52 -0
  132. {springbootai-2.3.9 → springbootai-2.3.11}/tests/test_metadata.py +2 -2
  133. {springbootai-2.3.9 → springbootai-2.3.11}/tests/test_oauth2.py +36 -1
  134. {springbootai-2.3.9 → springbootai-2.3.11}/tests/test_optional_component_timeouts.py +95 -5
  135. springbootai-2.3.11/tests/test_post_audit_enterprise_fixes.py +425 -0
  136. {springbootai-2.3.9 → springbootai-2.3.11}/tests/test_production_readiness.py +4 -3
  137. {springbootai-2.3.9 → springbootai-2.3.11}/tests/test_pymybatis_contract.py +37 -0
  138. springbootai-2.3.11/tests/test_remaining_enterprise_hardening.py +684 -0
  139. {springbootai-2.3.9 → springbootai-2.3.11}/tests/test_scheduling.py +25 -12
  140. {springbootai-2.3.9 → springbootai-2.3.11}/tests/test_seata_at_proxy.py +73 -4
  141. {springbootai-2.3.9 → springbootai-2.3.11}/tests/test_security.py +3 -2
  142. {springbootai-2.3.9 → springbootai-2.3.11}/tests/test_security_full.py +12 -5
  143. {springbootai-2.3.9 → springbootai-2.3.11}/tests/test_security_hardening.py +88 -0
  144. {springbootai-2.3.9 → springbootai-2.3.11}/tests/test_websocket_module.py +40 -2
  145. springbootai-2.3.9/requirements-ai.txt +0 -50
  146. springbootai-2.3.9/springbootai/ai/core.py +0 -526
  147. springbootai-2.3.9/springbootai/ai/vectorstore.py +0 -428
  148. springbootai-2.3.9/springbootai/aop/comprehensive_aop.py +0 -1017
  149. springbootai-2.3.9/springbootai/cloud/seata_at_proxy.py +0 -534
  150. springbootai-2.3.9/springbootai/event/publisher.py +0 -69
  151. springbootai-2.3.9/springbootai/langchain/loaders/loaders.py +0 -207
  152. springbootai-2.3.9/springbootai/messaging/kafka.py +0 -275
  153. springbootai-2.3.9/springbootai/messaging/rabbitmq.py +0 -506
  154. springbootai-2.3.9/springbootai/web/exception_handler.py +0 -60
  155. {springbootai-2.3.9 → springbootai-2.3.11}/LICENSE +0 -0
  156. {springbootai-2.3.9 → springbootai-2.3.11}/MANIFEST.in +0 -0
  157. {springbootai-2.3.9 → springbootai-2.3.11}/SECURITY.md +0 -0
  158. {springbootai-2.3.9 → springbootai-2.3.11}/requirements-langgraph.txt +0 -0
  159. {springbootai-2.3.9 → springbootai-2.3.11}/requirements-mcp.txt +0 -0
  160. {springbootai-2.3.9 → springbootai-2.3.11}/setup.cfg +0 -0
  161. {springbootai-2.3.9 → springbootai-2.3.11}/setup.py +0 -0
  162. {springbootai-2.3.9 → springbootai-2.3.11}/springbootAI.egg-info/dependency_links.txt +0 -0
  163. {springbootai-2.3.9 → springbootai-2.3.11}/springbootAI.egg-info/entry_points.txt +0 -0
  164. {springbootai-2.3.9 → springbootai-2.3.11}/springbootAI.egg-info/top_level.txt +0 -0
  165. {springbootai-2.3.9 → springbootai-2.3.11}/springbootai/ai/etl.py +0 -0
  166. {springbootai-2.3.9 → springbootai-2.3.11}/springbootai/annotations/__init__.py +0 -0
  167. {springbootai-2.3.9 → springbootai-2.3.11}/springbootai/annotations/batch.py +0 -0
  168. {springbootai-2.3.9 → springbootai-2.3.11}/springbootai/annotations/cloud.py +0 -0
  169. {springbootai-2.3.9 → springbootai-2.3.11}/springbootai/annotations/conditional.py +0 -0
  170. {springbootai-2.3.9 → springbootai-2.3.11}/springbootai/annotations/langchain.py +0 -0
  171. {springbootai-2.3.9 → springbootai-2.3.11}/springbootai/annotations/langgraph.py +0 -0
  172. {springbootai-2.3.9 → springbootai-2.3.11}/springbootai/annotations/lombok.py +0 -0
  173. {springbootai-2.3.9 → springbootai-2.3.11}/springbootai/annotations/messaging.py +0 -0
  174. {springbootai-2.3.9 → springbootai-2.3.11}/springbootai/aop/__init__.py +0 -0
  175. {springbootai-2.3.9 → springbootai-2.3.11}/springbootai/aop/aspect.py +0 -0
  176. {springbootai-2.3.9 → springbootai-2.3.11}/springbootai/aop/method_interceptor.py +0 -0
  177. {springbootai-2.3.9 → springbootai-2.3.11}/springbootai/aop/proxy_factory.py +0 -0
  178. {springbootai-2.3.9 → springbootai-2.3.11}/springbootai/batch/__init__.py +0 -0
  179. {springbootai-2.3.9 → springbootai-2.3.11}/springbootai/cli/__init__.py +0 -0
  180. {springbootai-2.3.9 → springbootai-2.3.11}/springbootai/cloud/load_balancer.py +0 -0
  181. {springbootai-2.3.9 → springbootai-2.3.11}/springbootai/cloud/seata_bridge.py +0 -0
  182. {springbootai-2.3.9 → springbootai-2.3.11}/springbootai/cloud/sentinel.py +0 -0
  183. {springbootai-2.3.9 → springbootai-2.3.11}/springbootai/cloud/transaction_store.py +0 -0
  184. {springbootai-2.3.9 → springbootai-2.3.11}/springbootai/config/__init__.py +0 -0
  185. {springbootai-2.3.9 → springbootai-2.3.11}/springbootai/config/config_monitor.py +0 -0
  186. {springbootai-2.3.9 → springbootai-2.3.11}/springbootai/context/__init__.py +0 -0
  187. {springbootai-2.3.9 → springbootai-2.3.11}/springbootai/context/bean_definition.py +0 -0
  188. {springbootai-2.3.9 → springbootai-2.3.11}/springbootai/context/lifecycle.py +0 -0
  189. {springbootai-2.3.9 → springbootai-2.3.11}/springbootai/context/registry.py +0 -0
  190. {springbootai-2.3.9 → springbootai-2.3.11}/springbootai/context/scanner.py +0 -0
  191. {springbootai-2.3.9 → springbootai-2.3.11}/springbootai/core/__init__.py +0 -0
  192. {springbootai-2.3.9 → springbootai-2.3.11}/springbootai/core/typing_utils.py +0 -0
  193. {springbootai-2.3.9 → springbootai-2.3.11}/springbootai/csv/annotations.py +0 -0
  194. {springbootai-2.3.9 → springbootai-2.3.11}/springbootai/csv/converters.py +0 -0
  195. {springbootai-2.3.9 → springbootai-2.3.11}/springbootai/csv/easy_csv.py +0 -0
  196. {springbootai-2.3.9 → springbootai-2.3.11}/springbootai/csv/exceptions.py +0 -0
  197. {springbootai-2.3.9 → springbootai-2.3.11}/springbootai/csv/reader.py +0 -0
  198. {springbootai-2.3.9 → springbootai-2.3.11}/springbootai/csv/writer.py +0 -0
  199. {springbootai-2.3.9 → springbootai-2.3.11}/springbootai/data/page.py +0 -0
  200. {springbootai-2.3.9 → springbootai-2.3.11}/springbootai/data/specification.py +0 -0
  201. {springbootai-2.3.9 → springbootai-2.3.11}/springbootai/datasource/annotations.py +0 -0
  202. {springbootai-2.3.9 → springbootai-2.3.11}/springbootai/datasource/context.py +0 -0
  203. {springbootai-2.3.9 → springbootai-2.3.11}/springbootai/devtools.py +0 -0
  204. {springbootai-2.3.9 → springbootai-2.3.11}/springbootai/event/__init__.py +0 -0
  205. {springbootai-2.3.9 → springbootai-2.3.11}/springbootai/excel/annotations.py +0 -0
  206. {springbootai-2.3.9 → springbootai-2.3.11}/springbootai/excel/converters.py +0 -0
  207. {springbootai-2.3.9 → springbootai-2.3.11}/springbootai/excel/easy_excel.py +0 -0
  208. {springbootai-2.3.9 → springbootai-2.3.11}/springbootai/excel/exceptions.py +0 -0
  209. {springbootai-2.3.9 → springbootai-2.3.11}/springbootai/excel/reader.py +0 -0
  210. {springbootai-2.3.9 → springbootai-2.3.11}/springbootai/excel/style.py +0 -0
  211. {springbootai-2.3.9 → springbootai-2.3.11}/springbootai/excel/writer.py +0 -0
  212. {springbootai-2.3.9 → springbootai-2.3.11}/springbootai/i18n/accessor.py +0 -0
  213. {springbootai-2.3.9 → springbootai-2.3.11}/springbootai/i18n/auto_config.py +0 -0
  214. {springbootai-2.3.9 → springbootai-2.3.11}/springbootai/i18n/holder.py +0 -0
  215. {springbootai-2.3.9 → springbootai-2.3.11}/springbootai/i18n/locale.py +0 -0
  216. {springbootai-2.3.9 → springbootai-2.3.11}/springbootai/i18n/locale_resolver.py +0 -0
  217. {springbootai-2.3.9 → springbootai-2.3.11}/springbootai/i18n/message_source.py +0 -0
  218. {springbootai-2.3.9 → springbootai-2.3.11}/springbootai/i18n/middleware.py +0 -0
  219. {springbootai-2.3.9 → springbootai-2.3.11}/springbootai/i18n/properties.py +0 -0
  220. {springbootai-2.3.9 → springbootai-2.3.11}/springbootai/i18n/sources.py +0 -0
  221. {springbootai-2.3.9 → springbootai-2.3.11}/springbootai/langchain/agents/__init__.py +0 -0
  222. {springbootai-2.3.9 → springbootai-2.3.11}/springbootai/langchain/agents/services.py +0 -0
  223. {springbootai-2.3.9 → springbootai-2.3.11}/springbootai/langchain/annotations.py +0 -0
  224. {springbootai-2.3.9 → springbootai-2.3.11}/springbootai/langchain/callbacks/__init__.py +0 -0
  225. {springbootai-2.3.9 → springbootai-2.3.11}/springbootai/langchain/callbacks/handlers.py +0 -0
  226. {springbootai-2.3.9 → springbootai-2.3.11}/springbootai/langchain/chains/__init__.py +0 -0
  227. {springbootai-2.3.9 → springbootai-2.3.11}/springbootai/langchain/chains/services.py +0 -0
  228. {springbootai-2.3.9 → springbootai-2.3.11}/springbootai/langchain/core.py +0 -0
  229. {springbootai-2.3.9 → springbootai-2.3.11}/springbootai/langchain/indexes/__init__.py +0 -0
  230. {springbootai-2.3.9 → springbootai-2.3.11}/springbootai/langchain/indexes/index.py +0 -0
  231. {springbootai-2.3.9 → springbootai-2.3.11}/springbootai/langchain/loaders/__init__.py +0 -0
  232. {springbootai-2.3.9 → springbootai-2.3.11}/springbootai/langchain/memory/__init__.py +0 -0
  233. {springbootai-2.3.9 → springbootai-2.3.11}/springbootai/langchain/memory/memory.py +0 -0
  234. {springbootai-2.3.9 → springbootai-2.3.11}/springbootai/langchain/parsers/__init__.py +0 -0
  235. {springbootai-2.3.9 → springbootai-2.3.11}/springbootai/langchain/parsers/parsers.py +0 -0
  236. {springbootai-2.3.9 → springbootai-2.3.11}/springbootai/langchain/prompts/__init__.py +0 -0
  237. {springbootai-2.3.9 → springbootai-2.3.11}/springbootai/langchain/prompts/templates.py +0 -0
  238. {springbootai-2.3.9 → springbootai-2.3.11}/springbootai/langchain/retrievers/__init__.py +0 -0
  239. {springbootai-2.3.9 → springbootai-2.3.11}/springbootai/langchain/retrievers/retrievers.py +0 -0
  240. {springbootai-2.3.9 → springbootai-2.3.11}/springbootai/langchain/tools/__init__.py +0 -0
  241. {springbootai-2.3.9 → springbootai-2.3.11}/springbootai/langchain/utilities/__init__.py +0 -0
  242. {springbootai-2.3.9 → springbootai-2.3.11}/springbootai/langchain/utilities/utils.py +0 -0
  243. {springbootai-2.3.9 → springbootai-2.3.11}/springbootai/langchain/vectorstores/__init__.py +0 -0
  244. {springbootai-2.3.9 → springbootai-2.3.11}/springbootai/langchain/vectorstores/stores.py +0 -0
  245. {springbootai-2.3.9 → springbootai-2.3.11}/springbootai/langgraph/__init__.py +0 -0
  246. {springbootai-2.3.9 → springbootai-2.3.11}/springbootai/langgraph/annotation_runtime.py +0 -0
  247. {springbootai-2.3.9 → springbootai-2.3.11}/springbootai/langgraph/annotations.py +0 -0
  248. {springbootai-2.3.9 → springbootai-2.3.11}/springbootai/langgraph/checkpoint.py +0 -0
  249. {springbootai-2.3.9 → springbootai-2.3.11}/springbootai/logging/__init__.py +0 -0
  250. {springbootai-2.3.9 → springbootai-2.3.11}/springbootai/logging/loguru_logger.py +0 -0
  251. {springbootai-2.3.9 → springbootai-2.3.11}/springbootai/mcp/__init__.py +0 -0
  252. {springbootai-2.3.9 → springbootai-2.3.11}/springbootai/mcp/annotation_runtime.py +0 -0
  253. {springbootai-2.3.9 → springbootai-2.3.11}/springbootai/mcp/annotations.py +0 -0
  254. {springbootai-2.3.9 → springbootai-2.3.11}/springbootai/mcp/server.py +0 -0
  255. {springbootai-2.3.9 → springbootai-2.3.11}/springbootai/messaging/__init__.py +0 -0
  256. {springbootai-2.3.9 → springbootai-2.3.11}/springbootai/monitoring/__init__.py +0 -0
  257. {springbootai-2.3.9 → springbootai-2.3.11}/springbootai/monitoring/admin_client.py +0 -0
  258. {springbootai-2.3.9 → springbootai-2.3.11}/springbootai/orm/ddl_auto.py +0 -0
  259. {springbootai-2.3.9 → springbootai-2.3.11}/springbootai/orm/pymybatis/annotations/__init__.py +0 -0
  260. {springbootai-2.3.9 → springbootai-2.3.11}/springbootai/orm/pymybatis/annotations/annotations.py +0 -0
  261. {springbootai-2.3.9 → springbootai-2.3.11}/springbootai/orm/pymybatis/cache/__init__.py +0 -0
  262. {springbootai-2.3.9 → springbootai-2.3.11}/springbootai/orm/pymybatis/cache/cache.py +0 -0
  263. {springbootai-2.3.9 → springbootai-2.3.11}/springbootai/orm/pymybatis/circuit_breaker/__init__.py +0 -0
  264. {springbootai-2.3.9 → springbootai-2.3.11}/springbootai/orm/pymybatis/core/__init__.py +0 -0
  265. {springbootai-2.3.9 → springbootai-2.3.11}/springbootai/orm/pymybatis/core/sql_session_factory.py +0 -0
  266. {springbootai-2.3.9 → springbootai-2.3.11}/springbootai/orm/pymybatis/dialect/__init__.py +0 -0
  267. {springbootai-2.3.9 → springbootai-2.3.11}/springbootai/orm/pymybatis/dialect/dialect.py +0 -0
  268. {springbootai-2.3.9 → springbootai-2.3.11}/springbootai/orm/pymybatis/dynamic_sql/__init__.py +0 -0
  269. {springbootai-2.3.9 → springbootai-2.3.11}/springbootai/orm/pymybatis/interceptor/__init__.py +0 -0
  270. {springbootai-2.3.9 → springbootai-2.3.11}/springbootai/orm/pymybatis/mapper/__init__.py +0 -0
  271. {springbootai-2.3.9 → springbootai-2.3.11}/springbootai/orm/pymybatis/mapper/mapper.py +0 -0
  272. {springbootai-2.3.9 → springbootai-2.3.11}/springbootai/orm/pymybatis/metrics/__init__.py +0 -0
  273. {springbootai-2.3.9 → springbootai-2.3.11}/springbootai/orm/pymybatis/metrics/metrics.py +0 -0
  274. {springbootai-2.3.9 → springbootai-2.3.11}/springbootai/orm/pymybatis/pool/__init__.py +0 -0
  275. {springbootai-2.3.9 → springbootai-2.3.11}/springbootai/orm/pymybatis/security/password_encoder.py +0 -0
  276. {springbootai-2.3.9 → springbootai-2.3.11}/springbootai/orm/pymybatis/security/sensitive_data_masker.py +0 -0
  277. {springbootai-2.3.9 → springbootai-2.3.11}/springbootai/orm/pymybatis/transaction/__init__.py +0 -0
  278. {springbootai-2.3.9 → springbootai-2.3.11}/springbootai/orm/pymybatis/type_handler/__init__.py +0 -0
  279. {springbootai-2.3.9 → springbootai-2.3.11}/springbootai/orm/pymybatis/type_handler/type_handler.py +0 -0
  280. {springbootai-2.3.9 → springbootai-2.3.11}/springbootai/orm/pymybatis/xml_parser/__init__.py +0 -0
  281. {springbootai-2.3.9 → springbootai-2.3.11}/springbootai/orm/pymybatis/xml_parser/xml_parser.py +0 -0
  282. {springbootai-2.3.9 → springbootai-2.3.11}/springbootai/retry/__init__.py +0 -0
  283. {springbootai-2.3.9 → springbootai-2.3.11}/springbootai/retry/recovery.py +0 -0
  284. {springbootai-2.3.9 → springbootai-2.3.11}/springbootai/retry/retry_annotations.py +0 -0
  285. {springbootai-2.3.9 → springbootai-2.3.11}/springbootai/scheduling/__init__.py +0 -0
  286. {springbootai-2.3.9 → springbootai-2.3.11}/springbootai/security/__init__.py +0 -0
  287. {springbootai-2.3.9 → springbootai-2.3.11}/springbootai/security/secret_manager.py +0 -0
  288. {springbootai-2.3.9 → springbootai-2.3.11}/springbootai/security/security_context.py +0 -0
  289. {springbootai-2.3.9 → springbootai-2.3.11}/springbootai/test/slicing.py +0 -0
  290. {springbootai-2.3.9 → springbootai-2.3.11}/springbootai/tracing/__init__.py +0 -0
  291. {springbootai-2.3.9 → springbootai-2.3.11}/springbootai/tracing/skywalking.py +0 -0
  292. {springbootai-2.3.9 → springbootai-2.3.11}/springbootai/utils/__init__.py +0 -0
  293. {springbootai-2.3.9 → springbootai-2.3.11}/springbootai/utils/bean_utils.py +0 -0
  294. {springbootai-2.3.9 → springbootai-2.3.11}/springbootai/utils/logger.py +0 -0
  295. {springbootai-2.3.9 → springbootai-2.3.11}/springbootai/validation/aop.py +0 -0
  296. {springbootai-2.3.9 → springbootai-2.3.11}/springbootai/validation/constraints.py +0 -0
  297. {springbootai-2.3.9 → springbootai-2.3.11}/springbootai/validation/exceptions.py +0 -0
  298. {springbootai-2.3.9 → springbootai-2.3.11}/springbootai/validation/validator.py +0 -0
  299. {springbootai-2.3.9 → springbootai-2.3.11}/springbootai/web/__init__.py +0 -0
  300. {springbootai-2.3.9 → springbootai-2.3.11}/springbootai/web/hateoas.py +0 -0
  301. {springbootai-2.3.9 → springbootai-2.3.11}/springbootai/web/result.py +0 -0
  302. {springbootai-2.3.9 → springbootai-2.3.11}/springbootai/websocket/annotations.py +0 -0
  303. {springbootai-2.3.9 → springbootai-2.3.11}/springbootai/websocket/exceptions.py +0 -0
  304. {springbootai-2.3.9 → springbootai-2.3.11}/sql/seata_undo_log.sql +0 -0
  305. {springbootai-2.3.9 → springbootai-2.3.11}/tests/test_actuator.py +0 -0
  306. {springbootai-2.3.9 → springbootai-2.3.11}/tests/test_ai_annotations.py +0 -0
  307. {springbootai-2.3.9 → springbootai-2.3.11}/tests/test_ai_declarative_annotations.py +0 -0
  308. {springbootai-2.3.9 → springbootai-2.3.11}/tests/test_ai_enterprise_hardening.py +0 -0
  309. {springbootai-2.3.9 → springbootai-2.3.11}/tests/test_annotation_combinations.py +0 -0
  310. {springbootai-2.3.9 → springbootai-2.3.11}/tests/test_annotations_contract.py +0 -0
  311. {springbootai-2.3.9 → springbootai-2.3.11}/tests/test_aop_annotations_full.py +0 -0
  312. {springbootai-2.3.9 → springbootai-2.3.11}/tests/test_aop_pointcut_enhancements.py +0 -0
  313. {springbootai-2.3.9 → springbootai-2.3.11}/tests/test_audit_time.py +0 -0
  314. {springbootai-2.3.9 → springbootai-2.3.11}/tests/test_batch.py +0 -0
  315. {springbootai-2.3.9 → springbootai-2.3.11}/tests/test_bean_utils.py +0 -0
  316. {springbootai-2.3.9 → springbootai-2.3.11}/tests/test_bus.py +0 -0
  317. {springbootai-2.3.9 → springbootai-2.3.11}/tests/test_cache_annotations.py +0 -0
  318. {springbootai-2.3.9 → springbootai-2.3.11}/tests/test_cli.py +0 -0
  319. {springbootai-2.3.9 → springbootai-2.3.11}/tests/test_cloud_log_safety.py +0 -0
  320. {springbootai-2.3.9 → springbootai-2.3.11}/tests/test_component_init_error.py +0 -0
  321. {springbootai-2.3.9 → springbootai-2.3.11}/tests/test_compositional_annotations.py +0 -0
  322. {springbootai-2.3.9 → springbootai-2.3.11}/tests/test_conditional_annotations.py +0 -0
  323. {springbootai-2.3.9 → springbootai-2.3.11}/tests/test_config_admin_hardening.py +0 -0
  324. {springbootai-2.3.9 → springbootai-2.3.11}/tests/test_config_binding.py +0 -0
  325. {springbootai-2.3.9 → springbootai-2.3.11}/tests/test_config_center.py +0 -0
  326. {springbootai-2.3.9 → springbootai-2.3.11}/tests/test_config_center_hardening.py +0 -0
  327. {springbootai-2.3.9 → springbootai-2.3.11}/tests/test_config_monitor.py +0 -0
  328. {springbootai-2.3.9 → springbootai-2.3.11}/tests/test_connection_resilience.py +0 -0
  329. {springbootai-2.3.9 → springbootai-2.3.11}/tests/test_core.py +0 -0
  330. {springbootai-2.3.9 → springbootai-2.3.11}/tests/test_core_annotations_full.py +0 -0
  331. {springbootai-2.3.9 → springbootai-2.3.11}/tests/test_csrf.py +0 -0
  332. {springbootai-2.3.9 → springbootai-2.3.11}/tests/test_csv_module.py +0 -0
  333. {springbootai-2.3.9 → springbootai-2.3.11}/tests/test_data_repository.py +0 -0
  334. {springbootai-2.3.9 → springbootai-2.3.11}/tests/test_data_rest.py +0 -0
  335. {springbootai-2.3.9 → springbootai-2.3.11}/tests/test_datasource_routing.py +0 -0
  336. {springbootai-2.3.9 → springbootai-2.3.11}/tests/test_ddl_auto.py +0 -0
  337. {springbootai-2.3.9 → springbootai-2.3.11}/tests/test_declarative_aop_post_authorize_recover.py +0 -0
  338. {springbootai-2.3.9 → springbootai-2.3.11}/tests/test_devtools.py +0 -0
  339. {springbootai-2.3.9 → springbootai-2.3.11}/tests/test_devtools_lifecycle_hardening.py +0 -0
  340. {springbootai-2.3.9 → springbootai-2.3.11}/tests/test_excel_module.py +0 -0
  341. {springbootai-2.3.9 → springbootai-2.3.11}/tests/test_hateoas.py +0 -0
  342. {springbootai-2.3.9 → springbootai-2.3.11}/tests/test_i18n_module.py +0 -0
  343. {springbootai-2.3.9 → springbootai-2.3.11}/tests/test_ioc_lifecycle_enhancements.py +0 -0
  344. {springbootai-2.3.9 → springbootai-2.3.11}/tests/test_jpa_version_transient.py +0 -0
  345. {springbootai-2.3.9 → springbootai-2.3.11}/tests/test_kafka.py +0 -0
  346. {springbootai-2.3.9 → springbootai-2.3.11}/tests/test_langchain_ext.py +0 -0
  347. {springbootai-2.3.9 → springbootai-2.3.11}/tests/test_langchain_module.py +0 -0
  348. {springbootai-2.3.9 → springbootai-2.3.11}/tests/test_langgraph_comprehensive.py +0 -0
  349. {springbootai-2.3.9 → springbootai-2.3.11}/tests/test_langgraph_module.py +0 -0
  350. {springbootai-2.3.9 → springbootai-2.3.11}/tests/test_logging_config.py +0 -0
  351. {springbootai-2.3.9 → springbootai-2.3.11}/tests/test_lombok_annotations.py +0 -0
  352. {springbootai-2.3.9 → springbootai-2.3.11}/tests/test_migration.py +0 -0
  353. {springbootai-2.3.9 → springbootai-2.3.11}/tests/test_nacos_config.py +0 -0
  354. {springbootai-2.3.9 → springbootai-2.3.11}/tests/test_new_annotations.py +0 -0
  355. {springbootai-2.3.9 → springbootai-2.3.11}/tests/test_new_features.py +0 -0
  356. {springbootai-2.3.9 → springbootai-2.3.11}/tests/test_orm_pymybatis_full.py +0 -0
  357. {springbootai-2.3.9 → springbootai-2.3.11}/tests/test_pymybatis_configuration_hardening.py +0 -0
  358. {springbootai-2.3.9 → springbootai-2.3.11}/tests/test_request_metrics.py +0 -0
  359. {springbootai-2.3.9 → springbootai-2.3.11}/tests/test_retry.py +0 -0
  360. {springbootai-2.3.9 → springbootai-2.3.11}/tests/test_runtime_configuration_fixes.py +0 -0
  361. {springbootai-2.3.9 → springbootai-2.3.11}/tests/test_scaffold_hardening.py +0 -0
  362. {springbootai-2.3.9 → springbootai-2.3.11}/tests/test_seata_bridge.py +0 -0
  363. {springbootai-2.3.9 → springbootai-2.3.11}/tests/test_seata_durable_store.py +0 -0
  364. {springbootai-2.3.9 → springbootai-2.3.11}/tests/test_select_page.py +0 -0
  365. {springbootai-2.3.9 → springbootai-2.3.11}/tests/test_starter.py +0 -0
  366. {springbootai-2.3.9 → springbootai-2.3.11}/tests/test_startup_lifecycle.py +0 -0
  367. {springbootai-2.3.9 → springbootai-2.3.11}/tests/test_swagger_module.py +0 -0
  368. {springbootai-2.3.9 → springbootai-2.3.11}/tests/test_test_slicing.py +0 -0
  369. {springbootai-2.3.9 → springbootai-2.3.11}/tests/test_tracing.py +0 -0
  370. {springbootai-2.3.9 → springbootai-2.3.11}/tests/test_transactional_events.py +0 -0
  371. {springbootai-2.3.9 → springbootai-2.3.11}/tests/test_validation_module.py +0 -0
  372. {springbootai-2.3.9 → springbootai-2.3.11}/tests/test_web_annotations_full.py +0 -0
  373. {springbootai-2.3.9 → springbootai-2.3.11}/tests/test_web_file_upload.py +0 -0
  374. {springbootai-2.3.9 → springbootai-2.3.11}/tests/test_web_root_mapping.py +0 -0
  375. {springbootai-2.3.9 → springbootai-2.3.11}/tests/test_web_security_responses.py +0 -0
  376. {springbootai-2.3.9 → springbootai-2.3.11}/tests/test_web_static_files.py +0 -0
@@ -1,5 +1,24 @@
1
1
  # Changelog
2
2
 
3
+ ## [2.3.11] - 2026-09-01
4
+
5
+ - 修复 PyMyBatis 访问控制仅覆盖查询、行级条件直接拼接及 SQL 尾部条件位置错误,写操作和字段权限现在失败关闭,动态租户值必须使用绑定参数。
6
+ - 修复事务提交前监听器异常被吞掉及 `REQUIRES_NEW`/`NOT_SUPPORTED` 同步上下文错误,提交否决会触发回滚并恢复外层上下文。
7
+ - 修复 Spring Cloud Bus RabbitMQ API 调用错误和缺失消费者,增加 Broker 确认、广播消费者、去重、消息大小限制及明确的失败状态。
8
+ - 加固 MCP/AI 工具边界:限制 HTTP 响应、队列、集合和 Schema 深度,拒绝压缩炸弹及高风险正则表达式。
9
+ - 修复 Prometheus Summary 创建失败、Tracer 已结束 Span 无界增长以及 Actuator/启动日志暴露原始异常的问题。
10
+ - 修复 CI 在 AI 测试切片后提前执行总覆盖率门槛的问题,覆盖率阈值现在只在全部测试切片完成后统一校验。
11
+ - 修复 LangChain 完整演示未声明文档加载根目录的问题,并为临时文件自动清理及 Windows 重定向控制台增加 UTF-8 输出兼容。
12
+
13
+ ## [2.3.10] - 2026-08-29
14
+
15
+ - 修复 AI 代理上下游消息被 SQL 注入检测误报:`#{...}` 绑定值始终按数据处理,不再扫描消息内容;`${...}` 原始替换仍默认拒绝,只有配置允许且值完整匹配严格白名单时才能使用。
16
+ - 加固企业级 AOP 注解:完善限流、熔断、幂等和分布式锁的共享后端、失败关闭与异步语义,并补充企业安全回归测试。
17
+ - 加固 OAuth2、CSRF 与 Data REST:完善 JWKS/issuer/audience/algorithm 校验、签名 CSRF Token、默认鉴权以及读写字段白名单。
18
+ - 完善受限 Seata AT 补偿模式:限制可解析 SQL 子集,使用绑定参数采集快照,原子写入 undo_log,增加冲突检测、自动安装代理和恢复线程生命周期管理;该模式仍不提供官方 TC 全局锁或跨服务强一致性。
19
+ - 审计并修正文档:统一当前版本号,修复 Starter 损坏的依赖示例、无效 Spring 官方链接、不可运行的 ChatClient 示例、过期改进记录、配置元数据偏差、Sphinx 包名及乱码注释。
20
+ - README 开头增加对阿里、华为、讯飞、心之声、字节、OpenAI、DeepSeek 等公司支持的致谢,不声明其使用或官方背书。
21
+
3
22
  ## [2.3.9] - 2026-08-28
4
23
 
5
24
  - 加固 OpenAI 兼容接口与 Ollama 的同步/异步流式协议:校验终止帧、错误信封和畸形响应,限制事件与响应大小,并完善超时、有限重试、重定向拒绝及 SDK 重试边界。
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: springbootAI
3
- Version: 2.3.9
3
+ Version: 2.3.11
4
4
  Summary: Spring-style Python framework with Web, ORM, Cloud and AI integrations
5
5
  Author-email: YuConggen <1516933915@qq.com>
6
6
  License-Expression: MIT
@@ -19,7 +19,7 @@ Classifier: Programming Language :: Python :: 3.12
19
19
  Classifier: Topic :: Software Development :: Libraries :: Application Frameworks
20
20
  Classifier: Topic :: Database
21
21
  Classifier: Topic :: Internet :: WWW/HTTP :: Dynamic Content
22
- Requires-Python: >=3.10
22
+ Requires-Python: <3.13,>=3.10
23
23
  Description-Content-Type: text/markdown
24
24
  License-File: LICENSE
25
25
  Requires-Dist: fastapi==0.141.1
@@ -120,6 +120,7 @@ Requires-Dist: psutil==6.1.1; extra == "all"
120
120
  Provides-Extra: dev
121
121
  Requires-Dist: pytest==9.1.1; extra == "dev"
122
122
  Requires-Dist: pytest-cov==7.1.0; extra == "dev"
123
+ Requires-Dist: mypy==1.18.2; extra == "dev"
123
124
  Requires-Dist: redis==8.1.0; extra == "dev"
124
125
  Requires-Dist: sqlglot==27.28.1; extra == "dev"
125
126
  Provides-Extra: full
@@ -172,6 +173,8 @@ Dynamic: license-file
172
173
  [![Security](https://github.com/YUCONGGEN/springbootAI/actions/workflows/security.yml/badge.svg?branch=master)](https://github.com/YUCONGGEN/springbootAI/actions/workflows/security.yml)
173
174
  [![License](https://img.shields.io/pypi/l/springbootAI)](https://github.com/YUCONGGEN/springbootAI/blob/master/LICENSE)
174
175
 
176
+ > 感谢阿里、华为、讯飞、心之声、字节、OpenAI、DeepSeek 等公司的支持。
177
+
175
178
  ## SpringBootAI 考试认证与证书
176
179
 
177
180
  SpringBootAI 已提供配套的在线考试认证平台,学习者、团队成员和项目使用方可以通过认证考试检验自己对框架核心能力的掌握情况,并在通过考试后获得对应证书。
@@ -216,7 +219,7 @@ SpringBootAI 是一个采用 Spring 风格注解和分层结构的 Python 应用
216
219
  | AI 与编排 | 模型调用、Tools、RAG、Chain、状态图、MCP client/server | LangChain / LangGraph / 官方 MCP SDK |
217
220
  | 生产治理 | 健康检查、Prometheus、限流熔断、追踪、Swagger | prometheus-client / OpenTelemetry / OpenAPI |
218
221
 
219
- 当前版本是 `2.3.9`;支持 Python 3.10、3.11 和 3.12,许可证为 MIT。项目仍标记为 Beta。用于公网高并发、合规敏感或支付/订单/库存等核心系统前,必须完成目标数据库、流量模型、故障恢复和安全基线验证。内嵌 Gateway 适合内部路由,不替代公网 Nginx/Kong/WAF;Seata `distributed` 对接官方 TC + TCC 回调;`at` 模式通过 ORM 拦截器自动生成 undo_log 实现自动回滚。
222
+ 当前版本是 `2.3.11`;支持 Python 3.10、3.11 和 3.12,许可证为 MIT。项目仍标记为 Beta。用于公网高并发、合规敏感或支付/订单/库存等核心系统前,必须完成目标数据库、流量模型、故障恢复和安全基线验证。内嵌 Gateway 适合内部路由,不替代公网 Nginx/Kong/WAF;Seata `distributed` 对接官方 TC + TCC 回调;`at` 是无 TC 全局锁的单进程受限补偿模式,不应当作跨服务强一致方案。
220
223
 
221
224
  [新手指南](https://github.com/YUCONGGEN/springbootAI/blob/master/doc/BEGINNER_GUIDE.md) | [全部文档](https://github.com/YUCONGGEN/springbootAI/tree/master/doc) | [变更日志](https://github.com/YUCONGGEN/springbootAI/blob/master/CHANGELOG.md) | [安全报告](https://github.com/YUCONGGEN/springbootAI/blob/master/SECURITY.md) | [发布检查](https://github.com/YUCONGGEN/springbootAI/blob/master/doc/RELEASE_CHECKLIST.md)
222
225
 
@@ -347,10 +350,10 @@ SpringBootAI 是一个 **Python Web 框架**。它把 Java Spring Boot 的"注
347
350
 
348
351
  | 组件 | 当前版本 |
349
352
  |------|----------|
350
- | `springbootai` 框架 API | 2.3.9 |
351
- | `springbootai.orm.pymybatis` | 2.3.9 |
352
- | `springbootai.ai` AI 模块 | 2.3.9 |
353
- | `springbootai.langchain` LangChain 模块 | 2.3.9 |
353
+ | `springbootai` 框架 API | 2.3.11 |
354
+ | `springbootai.orm.pymybatis` | 2.3.11 |
355
+ | `springbootai.ai` AI 模块 | 2.3.11 |
356
+ | `springbootai.langchain` LangChain 模块 | 2.3.11 |
354
357
  | Python | 3.10+ |
355
358
 
356
359
  ### 1.4 适合什么场景
@@ -366,7 +369,7 @@ SpringBootAI 是一个 **Python Web 框架**。它把 Java Spring Boot 的"注
366
369
  - `@Transactional` 支持七种 Spring 传播模式;`REQUIRES_NEW` 和 `NOT_SUPPORTED` 需要连接池有额外可用连接。
367
370
  - Profile 会筛选 `@Profile` Bean,并深度合并同目录的 `application-{profile}.yml`。
368
371
  - Nacos、RabbitMQ、Prometheus 依赖外部服务;Sentinel 限流熔断和 OpenTelemetry 追踪可内嵌运行。
369
- - HTTP 事务模式是持久化补偿协调器;`distributed` 模式提供真实 Seata TC + TCC 回调;`at` 模式通过 ORM 拦截器自动记录 undo_log 并在回滚时反向恢复数据。
372
+ - HTTP 事务模式是持久化补偿协调器;`distributed` 模式提供真实 Seata TC + TCC 回调;`at` 模式通过 ORM 拦截器记录 undo_log,但仅提供单进程、单数据库的受限补偿。
370
373
  - 限流、分布式锁、幂等和缓存语义依赖 Redis 等后端;核心业务必须选择 fail-closed,不能依赖进程内降级继续提供分布式语义。
371
374
 
372
375
  ### 1.6 注解使用总览
@@ -401,7 +404,7 @@ SpringBootAI 注解会先把元数据放到 `__spring_annotations__`。之后是
401
404
  | Nacos 服务发现 | ✅ 可用 | 服务注册/发现/订阅 |
402
405
  | Sentinel 限流熔断 | ✅ 可用 | 内嵌引擎,QPS 限流、异常比例熔断、热点参数限流,无需 Dashboard |
403
406
  | 分布式追踪 | ✅ 可用 | 原生 OpenTelemetry(W3C traceparent),自动 HTTP/Feign 注入 |
404
- | Seata 分布式事务 | ✅ 可用 | `distributed` 对接真实 Seata TC 执行 TCC 回调;`at` 模式通过 ORM 拦截器自动记录 undo_log 并反向恢复;`http` 提供持久化补偿 |
407
+ | Seata 分布式事务 | ✅ 有条件可用 | `distributed` 对接真实 Seata TC 执行 TCC 回调;`at` 仅为无全局锁的单进程受限补偿;`http` 提供持久化补偿 |
405
408
  | API Gateway | ✅ 可用 | 轻量 ASGI/WSGI 网关,路由转发、路径重写、过滤器链、负载均衡 |
406
409
  | Prometheus 监控 | ✅ 可用 | Counter/Gauge/Histogram 指标暴露 |
407
410
  | Feign 声明式 HTTP | ✅ 可用 | 声明式接口、Fallback 降级、自动传播 XID 和 trace 头 |
@@ -905,7 +908,7 @@ class AppService:
905
908
  self.app_name = value
906
909
 
907
910
  @Component
908
- @ConfigurationProperties(prefix="springbootai.datasource")
911
+ @ConfigurationProperties(prefix="database")
909
912
  class DataSourceProperties:
910
913
  def __init__(self):
911
914
  self.url = ""
@@ -10,6 +10,8 @@
10
10
  [![Security](https://github.com/YUCONGGEN/springbootAI/actions/workflows/security.yml/badge.svg?branch=master)](https://github.com/YUCONGGEN/springbootAI/actions/workflows/security.yml)
11
11
  [![License](https://img.shields.io/pypi/l/springbootAI)](https://github.com/YUCONGGEN/springbootAI/blob/master/LICENSE)
12
12
 
13
+ > 感谢阿里、华为、讯飞、心之声、字节、OpenAI、DeepSeek 等公司的支持。
14
+
13
15
  ## SpringBootAI 考试认证与证书
14
16
 
15
17
  SpringBootAI 已提供配套的在线考试认证平台,学习者、团队成员和项目使用方可以通过认证考试检验自己对框架核心能力的掌握情况,并在通过考试后获得对应证书。
@@ -54,7 +56,7 @@ SpringBootAI 是一个采用 Spring 风格注解和分层结构的 Python 应用
54
56
  | AI 与编排 | 模型调用、Tools、RAG、Chain、状态图、MCP client/server | LangChain / LangGraph / 官方 MCP SDK |
55
57
  | 生产治理 | 健康检查、Prometheus、限流熔断、追踪、Swagger | prometheus-client / OpenTelemetry / OpenAPI |
56
58
 
57
- 当前版本是 `2.3.9`;支持 Python 3.10、3.11 和 3.12,许可证为 MIT。项目仍标记为 Beta。用于公网高并发、合规敏感或支付/订单/库存等核心系统前,必须完成目标数据库、流量模型、故障恢复和安全基线验证。内嵌 Gateway 适合内部路由,不替代公网 Nginx/Kong/WAF;Seata `distributed` 对接官方 TC + TCC 回调;`at` 模式通过 ORM 拦截器自动生成 undo_log 实现自动回滚。
59
+ 当前版本是 `2.3.11`;支持 Python 3.10、3.11 和 3.12,许可证为 MIT。项目仍标记为 Beta。用于公网高并发、合规敏感或支付/订单/库存等核心系统前,必须完成目标数据库、流量模型、故障恢复和安全基线验证。内嵌 Gateway 适合内部路由,不替代公网 Nginx/Kong/WAF;Seata `distributed` 对接官方 TC + TCC 回调;`at` 是无 TC 全局锁的单进程受限补偿模式,不应当作跨服务强一致方案。
58
60
 
59
61
  [新手指南](https://github.com/YUCONGGEN/springbootAI/blob/master/doc/BEGINNER_GUIDE.md) | [全部文档](https://github.com/YUCONGGEN/springbootAI/tree/master/doc) | [变更日志](https://github.com/YUCONGGEN/springbootAI/blob/master/CHANGELOG.md) | [安全报告](https://github.com/YUCONGGEN/springbootAI/blob/master/SECURITY.md) | [发布检查](https://github.com/YUCONGGEN/springbootAI/blob/master/doc/RELEASE_CHECKLIST.md)
60
62
 
@@ -185,10 +187,10 @@ SpringBootAI 是一个 **Python Web 框架**。它把 Java Spring Boot 的"注
185
187
 
186
188
  | 组件 | 当前版本 |
187
189
  |------|----------|
188
- | `springbootai` 框架 API | 2.3.9 |
189
- | `springbootai.orm.pymybatis` | 2.3.9 |
190
- | `springbootai.ai` AI 模块 | 2.3.9 |
191
- | `springbootai.langchain` LangChain 模块 | 2.3.9 |
190
+ | `springbootai` 框架 API | 2.3.11 |
191
+ | `springbootai.orm.pymybatis` | 2.3.11 |
192
+ | `springbootai.ai` AI 模块 | 2.3.11 |
193
+ | `springbootai.langchain` LangChain 模块 | 2.3.11 |
192
194
  | Python | 3.10+ |
193
195
 
194
196
  ### 1.4 适合什么场景
@@ -204,7 +206,7 @@ SpringBootAI 是一个 **Python Web 框架**。它把 Java Spring Boot 的"注
204
206
  - `@Transactional` 支持七种 Spring 传播模式;`REQUIRES_NEW` 和 `NOT_SUPPORTED` 需要连接池有额外可用连接。
205
207
  - Profile 会筛选 `@Profile` Bean,并深度合并同目录的 `application-{profile}.yml`。
206
208
  - Nacos、RabbitMQ、Prometheus 依赖外部服务;Sentinel 限流熔断和 OpenTelemetry 追踪可内嵌运行。
207
- - HTTP 事务模式是持久化补偿协调器;`distributed` 模式提供真实 Seata TC + TCC 回调;`at` 模式通过 ORM 拦截器自动记录 undo_log 并在回滚时反向恢复数据。
209
+ - HTTP 事务模式是持久化补偿协调器;`distributed` 模式提供真实 Seata TC + TCC 回调;`at` 模式通过 ORM 拦截器记录 undo_log,但仅提供单进程、单数据库的受限补偿。
208
210
  - 限流、分布式锁、幂等和缓存语义依赖 Redis 等后端;核心业务必须选择 fail-closed,不能依赖进程内降级继续提供分布式语义。
209
211
 
210
212
  ### 1.6 注解使用总览
@@ -239,7 +241,7 @@ SpringBootAI 注解会先把元数据放到 `__spring_annotations__`。之后是
239
241
  | Nacos 服务发现 | ✅ 可用 | 服务注册/发现/订阅 |
240
242
  | Sentinel 限流熔断 | ✅ 可用 | 内嵌引擎,QPS 限流、异常比例熔断、热点参数限流,无需 Dashboard |
241
243
  | 分布式追踪 | ✅ 可用 | 原生 OpenTelemetry(W3C traceparent),自动 HTTP/Feign 注入 |
242
- | Seata 分布式事务 | ✅ 可用 | `distributed` 对接真实 Seata TC 执行 TCC 回调;`at` 模式通过 ORM 拦截器自动记录 undo_log 并反向恢复;`http` 提供持久化补偿 |
244
+ | Seata 分布式事务 | ✅ 有条件可用 | `distributed` 对接真实 Seata TC 执行 TCC 回调;`at` 仅为无全局锁的单进程受限补偿;`http` 提供持久化补偿 |
243
245
  | API Gateway | ✅ 可用 | 轻量 ASGI/WSGI 网关,路由转发、路径重写、过滤器链、负载均衡 |
244
246
  | Prometheus 监控 | ✅ 可用 | Counter/Gauge/Histogram 指标暴露 |
245
247
  | Feign 声明式 HTTP | ✅ 可用 | 声明式接口、Fallback 降级、自动传播 XID 和 trace 头 |
@@ -743,7 +745,7 @@ class AppService:
743
745
  self.app_name = value
744
746
 
745
747
  @Component
746
- @ConfigurationProperties(prefix="springbootai.datasource")
748
+ @ConfigurationProperties(prefix="database")
747
749
  class DataSourceProperties:
748
750
  def __init__(self):
749
751
  self.url = ""
@@ -3,16 +3,16 @@ requires = ["setuptools>=77", "wheel>=0.37"]
3
3
  build-backend = "setuptools.build_meta"
4
4
 
5
5
  # ========================================
6
- # SpringBootAI 椤圭洰鍏冩暟鎹笌渚濊禆澹版槑锛圥EP 621锛?
7
- # 鏈枃浠舵槸渚濊禆鐨勫崟涓€鐪熷疄鏉ユ簮锛岀被浼?Spring Boot 鐨?pom.xml
8
- # 鐗堟湰閿佸畾绛栫暐锛氭墍鏈夌洿鎺ヤ緷璧栦娇鐢?== 绮剧‘閿佸畾
9
- # 瀹為獙鎬?HTTP 琛ュ伩鍗忚皟鍣ㄤ笉鎻愪緵 Seata AT 璇箟锛涚敓浜у垎甯冨紡浜嬪姟闇€瑕佺湡瀹炲崗璋冨櫒
6
+ # SpringBootAI 项目元数据与依赖声明(PEP 621
7
+ # 本文件是依赖的唯一真实来源,类似 Spring Boot pom.xml
8
+ # 核心依赖使用精确版本;LangChain partner 包使用带上限的兼容范围。
9
+ # 内置 HTTP/AT 模式是受限补偿机制;生产分布式事务需要真实协调器和业务幂等。
10
10
  # ========================================
11
11
 
12
12
  [project]
13
13
  # Distribution name: springbootAI (pip install springbootAI); import package: springbootai.
14
14
  name = "springbootAI"
15
- version = "2.3.9"
15
+ version = "2.3.11"
16
16
  description = "Spring-style Python framework with Web, ORM, Cloud and AI integrations"
17
17
  readme = "README.md"
18
18
  license = "MIT"
@@ -32,11 +32,11 @@ classifiers = [
32
32
  "Topic :: Database",
33
33
  "Topic :: Internet :: WWW/HTTP :: Dynamic Content",
34
34
  ]
35
- requires-python = ">=3.10"
35
+ requires-python = ">=3.10,<3.13"
36
36
 
37
37
  # ========================================
38
- # 鏍稿績渚濊禆 - 绫讳技 Spring Boot Starter Web/Core
39
- # 瀹夎锛歱ip install springbootAI
38
+ # 核心依赖——类似 Spring Boot Starter Web/Core
39
+ # 安装:pip install springbootAI
40
40
  # ========================================
41
41
  dependencies = [
42
42
  "fastapi==0.141.1",
@@ -56,50 +56,50 @@ dependencies = [
56
56
 
57
57
  [project.optional-dependencies]
58
58
  # ========================================
59
- # 鏁版嵁搴撻┍鍔?- 绫讳技 Spring Boot Starter JDBC/Data JPA
59
+ # 数据库驱动——类似 Spring Boot Starter JDBC/Data JPA
60
60
  # ========================================
61
61
  mysql = ["PyMySQL==1.2.0"]
62
62
  postgresql = ["psycopg2-binary==2.9.12"]
63
63
  sqlalchemy = ["sqlalchemy==2.0.40"]
64
64
 
65
65
  # ========================================
66
- # Redis - 绫讳技 Spring Boot Starter Data Redis
66
+ # Redis——类似 Spring Boot Starter Data Redis
67
67
  # ========================================
68
68
  redis = ["redis==8.1.0"]
69
69
 
70
70
  # ========================================
71
- # 娑堟伅闃熷垪 - 绫讳技 Spring Boot Starter AMQP
71
+ # 消息队列——类似 Spring Boot Starter AMQP
72
72
  # ========================================
73
73
  rabbitmq = ["pika==1.4.4"]
74
74
  kafka = ["kafka-python==2.0.2"]
75
75
 
76
76
  # ========================================
77
- # 鏈嶅姟鍙戠幇 - 绫讳技 Spring Cloud Alibaba Nacos
77
+ # 服务发现——类似 Spring Cloud Alibaba Nacos
78
78
  # ========================================
79
79
  nacos = ["nacos-sdk-python==2.0.11"]
80
80
 
81
81
  # ========================================
82
- # 鐩戞帶鍜屾棩蹇?- 绫讳技 Spring Boot Actuator + Micrometer
82
+ # 监控和日志——类似 Spring Boot Actuator + Micrometer
83
83
  # ========================================
84
84
  prometheus = ["prometheus-client==0.26.0"]
85
85
  logging = ["loguru==0.7.3"]
86
86
 
87
87
  # ========================================
88
- # SQL娉ㄥ叆妫€娴?
88
+ # SQL 结构分析(可选 AST 校验)
89
89
  # ========================================
90
90
  ast = ["sqlglot==27.28.1"]
91
91
 
92
92
  # ========================================
93
- # Excel 娉ㄨВ椹卞姩璇诲啓 - 绫讳技 alibaba EasyExcel
94
- # 瀹夎锛歱ip install springbootAI[excel]
93
+ # Excel 注解驱动读写——类似 Alibaba EasyExcel
94
+ # 安装:pip install springbootAI[excel]
95
95
  # ========================================
96
96
  excel = ["openpyxl==3.1.5"]
97
97
 
98
98
  # ========================================
99
- # SpringBootAI AI 妯″潡 - 瀵归綈 Spring AI锛圕hatClient/Advisor/ETL/Tools锛?
100
- # 瀹夎锛歱ip install springbootAI[ai]
101
- # AI 妯″潡閲囩敤"鍙€変緷璧?+ 闄嶇骇"璁捐锛氭湭瀹夎浠嶅彲鐢紙闄嶇骇鍘熺敓 HTTP + FakeChatModel锛?
102
- # 渚濊禆娓呭崟鍚屾鑷?requirements-ai.txt锛堟墍鏈夌増鏈彿 == 宸叉祴璇曢獙璇侊級
99
+ # SpringBootAI AI 模块——对齐 Spring AI(ChatClient/Advisor/ETL/Tools
100
+ # 安装:pip install springbootAI[ai]
101
+ # 可选依赖未安装时核心包仍可导入;真实模型能力需安装对应 extra。
102
+ # 依赖清单与 requirements-ai.txt 保持同步。
103
103
  # ========================================
104
104
  ai = [
105
105
  "langchain-openai==1.4.2",
@@ -112,10 +112,10 @@ ai = [
112
112
  ]
113
113
 
114
114
  # ========================================
115
- # SpringBootAI LangChain 妯″潡 - 灏佽 langchain classic 鍏ㄥ鑳藉姏 + 30+ partner 鎻愪緵鍟?
116
- # 瀹夎锛歱ip install springbootAI[langchain]
117
- # 璁捐锛歱artner 鍖呮寜闇€鍚敤锛屾湭瀹夎鐨?partner 鐢?@ConditionalOnClass/鍙嬪ソ閿欒鑷姩璺宠繃
118
- # 璇﹁ doc/LANGCHAIN_MODULE.md
115
+ # SpringBootAI LangChain 模块——封装 langchain classic 与常用 partner
116
+ # 安装:pip install springbootAI[langchain]
117
+ # partner 包按需启用;未安装的 provider 会跳过并给出明确提示。
118
+ # 详见 doc/LANGCHAIN_MODULE.md
119
119
  # ========================================
120
120
  langchain = [
121
121
  "langchain-openai==1.4.2",
@@ -125,13 +125,13 @@ langchain = [
125
125
  "langchain-community==0.4.2",
126
126
  "numpy==2.2.6",
127
127
  "pydantic==2.13.4",
128
- # 榛樿瑁呬笂鐨勫悜閲忓簱/鏂囨。/宸ュ叿渚濊禆锛堝畨鍏細鍏ㄩ儴閿佸畾宸茬煡瀹夊叏鐗堟湰锛?
128
+ # 默认安装的向量库、文档和工具依赖
129
129
  "faiss-cpu>=1.7.4,<2",
130
130
  "pypdf>=4.0.0,<6",
131
131
  "beautifulsoup4>=4.12.0,<5",
132
132
  "sqlalchemy>=2.0.0,<3",
133
- # partner 鎻愪緵鍟嗗寘锛堟寜闇€鍚敤锛屼笅闈㈡槸甯哥敤鍑犳锛涘叾浣欒 PARTNER_REGISTRY 鏂囨。鎸夐渶 pip install锛?
134
- # 瀹夊叏锛氶攣瀹氫笂闄愮増鏈槻姝緵搴旈摼鏀诲嚮锛宲ip-audit 浼氬湪 CI 涓寔缁壂鎻?
133
+ # 常用 partner 包;其他 provider PARTNER_REGISTRY,按需安装。
134
+ # 所有兼容范围均设置上限,并由 CI 持续执行依赖审计。
135
135
  "langchain-anthropic>=0.2.0,<2",
136
136
  "langchain-ollama>=0.2.0,<2",
137
137
  "langchain-chroma>=0.1.0,<2",
@@ -144,9 +144,9 @@ langchain = [
144
144
  ]
145
145
 
146
146
  # ========================================
147
- # SpringBootAI LangGraph 濡€虫健 - 閻欘剛鐝涢惃鍕Ц閹礁娴樼紓鏍ㄥ笓娑撳骸褰查幁銏狀槻閹笛嗩攽
148
- # 鐎瑰顥婇敍姝眎p install springbootAI[langgraph]
149
- # 濮e繑顐奸崣鎴濈闁夸礁鐣鹃悧鍫熸拱閿涘奔绗?langchain-core 1.x 閺嶇绺鹃幒銉ュ經閸忕厧顔?
147
+ # SpringBootAI LangGraph 模块——状态图、持久化检查点与工作流编排
148
+ # 安装:pip install springbootAI[langgraph]
149
+ # 版本与 langchain-core 1.x 兼容矩阵保持一致。
150
150
  # ========================================
151
151
  langgraph = [
152
152
  "langgraph==1.2.9",
@@ -160,8 +160,8 @@ mcp = [
160
160
  ]
161
161
 
162
162
  # ========================================
163
- # 缁勫悎 Starter - 绫讳技 Spring Boot Starter Web/Cloud/All
164
- # 瀹夎锛歱ip install springbootAI[web] / springbootAI[cloud] / springbootAI[all]
163
+ # 组合 Starter——类似 Spring Boot Starter Web/Cloud/All
164
+ # 安装:pip install springbootAI[web] / springbootAI[cloud] / springbootAI[all]
165
165
  # ========================================
166
166
  web = [
167
167
  "fastapi==0.141.1",
@@ -194,38 +194,39 @@ all = [
194
194
  ]
195
195
 
196
196
  # ========================================
197
- # 寮€鍙戜緷璧?
197
+ # 开发依赖
198
198
  # ========================================
199
199
  dev = [
200
200
  "pytest==9.1.1",
201
201
  "pytest-cov==7.1.0",
202
+ "mypy==1.18.2",
202
203
  "redis==8.1.0",
203
204
  "sqlglot==27.28.1",
204
205
  ]
205
206
 
206
207
  # ========================================
207
- # 鍏ㄩ儴渚濊禆锛堜竴閿畨瑁咃級
208
+ # 全部依赖(一键安装)
208
209
  # ========================================
209
210
  full = [
210
- # 鏁版嵁搴撻┍鍔?
211
+ # 数据库驱动
211
212
  "PyMySQL==1.2.0",
212
213
  "psycopg2-binary==2.9.12",
213
214
  "sqlalchemy==2.0.40",
214
- # 缂撳瓨 / 娑堟伅 / 鏈嶅姟鍙戠幇
215
+ # 缓存 / 消息 / 服务发现
215
216
  "redis==8.1.0",
216
217
  "pika==1.4.4",
217
218
  "nacos-sdk-python==2.0.11",
218
- # 鐩戞帶 / 鏃ュ織 / 瀹夊叏
219
+ # 监控 / 日志 / 安全
219
220
  "prometheus-client==0.26.0",
220
221
  "loguru==0.7.3",
221
222
  "sqlglot==27.28.1",
222
223
  "defusedxml==0.7.1",
223
- # HTTP 瀹㈡埛绔?
224
+ # HTTP 客户端
224
225
  "requests==2.34.2",
225
226
  "httpx==0.28.1",
226
227
  # Excel
227
228
  "openpyxl==3.1.5",
228
- # AI 妯″潡锛堝榻?springbootAI[ai]锛?
229
+ # AI 模块(对齐 springbootAI[ai]
229
230
  "langchain-openai==1.4.2",
230
231
  "langchain-core==1.5.4",
231
232
  "langchain-classic==1.0.8",
@@ -233,12 +234,12 @@ full = [
233
234
  "langchain-community==0.4.2",
234
235
  "numpy==2.2.6",
235
236
  "pydantic==2.13.4",
236
- # LangChain 妯″潡澧炲己锛堝榻?springbootAI[langchain]锛?
237
+ # LangChain 模块增强(对齐 springbootAI[langchain]
237
238
  "faiss-cpu>=1.7.4,<2",
238
239
  "pypdf>=4.0.0,<6",
239
240
  "beautifulsoup4>=4.12.0,<5",
240
241
  "langchain-experimental>=0.3.0,<2",
241
- # partner 鎻愪緵鍟嗗寘锛堟寜闇€鍚敤锛涘彲閫?partner 鏈湪姝ゅ垪鍑猴紝pip install 瀵瑰簲鍖呭嵆鍙級
242
+ # 常用 partner 包;其他 provider 可按需安装对应包。
242
243
  "langchain-anthropic>=0.2.0,<2",
243
244
  "langchain-ollama>=0.2.0,<2",
244
245
  "langchain-chroma>=0.1.0,<2",
@@ -258,11 +259,9 @@ full = [
258
259
  pythonpath = [".", "examples"]
259
260
  testpaths = ["tests"]
260
261
  filterwarnings = [
261
- # 闈欓粯 langchain_classic 寮冪敤鍛婅鍜?community sunset 鍛婅
262
- # 鍘熷洜锛氭湰椤圭洰鏈夋剰閿佸畾 langchain classic (1.x) API锛岃繖浜涙槸棰勬湡鍐呯殑妗嗘灦绾у憡璀?
263
- # 娉ㄦ剰锛歀angChainDeprecationWarning 鏄?DeprecationWarning 瀛愮被锛?
264
- # pytest 鐨?default::DeprecationWarning 浼氳鐩?simplefilter锛?
265
- # 鍥犳蹇呴』鍦ㄦ閰嶇疆涓槑纭拷鐣ャ€?
262
+ # 静默 langchain_classic 弃用告警和 community sunset 告警。
263
+ # 项目当前有意兼容 classic 1.x API,这些属于已知的框架级告警。
264
+ # LangChainDeprecationWarning DeprecationWarning 子类,因此在这里精确过滤。
266
265
  "ignore:.*LLMChain.*:DeprecationWarning",
267
266
  "ignore:.*ConversationChain.*:DeprecationWarning",
268
267
  "ignore:.*ConversationBufferMemory.*:DeprecationWarning",
@@ -280,6 +279,43 @@ markers = [
280
279
  "seata_integration: requires a compatible Seata SDK and real Seata Server",
281
280
  ]
282
281
 
282
+ [tool.coverage.run]
283
+ branch = true
284
+ source = ["springbootai"]
285
+
286
+ [tool.coverage.report]
287
+ fail_under = 68
288
+ show_missing = true
289
+
290
+ [tool.mypy]
291
+ python_version = "3.10"
292
+ files = [
293
+ "springbootai/ai/annotation_runtime.py",
294
+ "springbootai/ai/advisors.py",
295
+ "springbootai/ai/vectorstore.py",
296
+ "springbootai/cloud/gateway.py",
297
+ "springbootai/websocket/router.py",
298
+ "springbootai/messaging/kafka.py",
299
+ "springbootai/messaging/rabbitmq.py",
300
+ "springbootai/data/repository.py",
301
+ "springbootai/retry/retry_decorator.py",
302
+ "springbootai/ai/tools.py",
303
+ "springbootai/cloud/bus.py",
304
+ "springbootai/cloud/tracer.py",
305
+ "springbootai/mcp/client.py",
306
+ "springbootai/mcp/config.py",
307
+ "springbootai/monitoring/prometheus.py",
308
+ "springbootai/orm/pymybatis/core/sql_session.py",
309
+ "springbootai/orm/pymybatis/security/access_control.py",
310
+ "springbootai/tx/synchronization.py",
311
+ ]
312
+ ignore_missing_imports = true
313
+ follow_imports = "skip"
314
+ allow_untyped_defs = true
315
+ allow_incomplete_defs = true
316
+ check_untyped_defs = true
317
+ show_error_codes = true
318
+
283
319
  [project.urls]
284
320
  Homepage = "https://github.com/YUCONGGEN/springbootAI"
285
321
  Repository = "https://github.com/YUCONGGEN/springbootAI.git"
@@ -289,8 +325,8 @@ Issues = "https://github.com/YUCONGGEN/springbootAI/issues"
289
325
 
290
326
  [project.scripts]
291
327
  springbootai = "springbootai.main:run_cli"
292
- # 椤圭洰鑴氭墜鏋跺伐鍏凤紙绫讳技 Spring Initializr锛夈€傜湡瀹炵粓绔粯璁や腑鏂囬棶绛旓紱
293
- # CI/鑴氭湰璇锋樉寮忎娇鐢細springbootai-init my-project --modules web,orm --non-interactive
328
+ # 项目脚手架工具(类似 Spring Initializr)。真实终端默认使用中文问答;
329
+ # CI/脚本请显式使用:springbootai-init my-project --modules web,orm --non-interactive
294
330
  springbootai-init = "springbootai.cli.scaffold:main"
295
331
 
296
332
  [tool.setuptools.packages.find]
@@ -298,4 +334,4 @@ include = ["springbootai*"]
298
334
  namespaces = false
299
335
 
300
336
  [tool.setuptools.package-data]
301
- springbootai = ["*.py", "**/*.py", "**/*.xml", "**/*.yml", "**/*.yaml"]
337
+ springbootai = ["*.py", "py.typed", "**/*.py", "**/*.xml", "**/*.yml", "**/*.yaml"]
@@ -0,0 +1,44 @@
1
+ # ========================================
2
+ # SpringBootAI optional AI/LangChain dependencies (exact versions)
3
+ # ========================================
4
+ # The AI module uses optional dependencies with a built-in fallback:
5
+ # - Without this file, native HTTP providers and FakeChatModel remain usable.
6
+ # - Installing it enables LangChain adapters detected by ai/providers.py.
7
+ #
8
+ # Install examples:
9
+ # pip install -r requirements-ai.txt
10
+ # pip install langchain-openai==1.4.2
11
+ #
12
+ # Recommended Python: 3.10+ (CI covers 3.10, 3.11 and 3.12).
13
+ # Every pinned version is covered by tests and dependency auditing.
14
+ # Keep this file ASCII-only: pip-audit may use the Windows system encoding.
15
+ # ========================================
16
+
17
+ # LangChain core (BaseChatModel, Embeddings and Runnable APIs).
18
+ langchain-core==1.5.4
19
+
20
+ # Classic APIs including LLMChain, ConversationChain and initialize_agent.
21
+ langchain-classic==1.0.8
22
+
23
+ # OpenAI-compatible providers (OpenAI, Azure, DeepSeek and Moonshot).
24
+ langchain-openai==1.4.2
25
+
26
+ # RecursiveCharacterTextSplitter and CharacterTextSplitter.
27
+ langchain-text-splitters==1.1.2
28
+
29
+ # Community integrations including FAISS, Chroma, DuckDuckGo and Wikipedia.
30
+ langchain-community==0.4.2
31
+
32
+ # Vector similarity calculations; 2.2.6 retains Python 3.10 compatibility.
33
+ numpy==2.2.6
34
+
35
+ # Pydantic v2 for validation and structured output parsing.
36
+ pydantic==2.13.4
37
+
38
+ # ========================================
39
+ # Additional optional packages (install only when needed)
40
+ # ========================================
41
+
42
+ # Vector database: faiss-cpu
43
+ # PDF document loading: pypdf
44
+ # HTML parsing: beautifulsoup4
@@ -55,9 +55,4 @@ pydantic==2.13.4
55
55
  # 测试依赖
56
56
  pytest==9.1.1
57
57
  pytest-cov==7.1.0
58
- openpyxl==3.1.5
59
-
60
- bcrypt
61
- springbootai
62
- springbootai
63
- springbootai
58
+ openpyxl==3.1.5
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: springbootAI
3
- Version: 2.3.9
3
+ Version: 2.3.11
4
4
  Summary: Spring-style Python framework with Web, ORM, Cloud and AI integrations
5
5
  Author-email: YuConggen <1516933915@qq.com>
6
6
  License-Expression: MIT
@@ -19,7 +19,7 @@ Classifier: Programming Language :: Python :: 3.12
19
19
  Classifier: Topic :: Software Development :: Libraries :: Application Frameworks
20
20
  Classifier: Topic :: Database
21
21
  Classifier: Topic :: Internet :: WWW/HTTP :: Dynamic Content
22
- Requires-Python: >=3.10
22
+ Requires-Python: <3.13,>=3.10
23
23
  Description-Content-Type: text/markdown
24
24
  License-File: LICENSE
25
25
  Requires-Dist: fastapi==0.141.1
@@ -120,6 +120,7 @@ Requires-Dist: psutil==6.1.1; extra == "all"
120
120
  Provides-Extra: dev
121
121
  Requires-Dist: pytest==9.1.1; extra == "dev"
122
122
  Requires-Dist: pytest-cov==7.1.0; extra == "dev"
123
+ Requires-Dist: mypy==1.18.2; extra == "dev"
123
124
  Requires-Dist: redis==8.1.0; extra == "dev"
124
125
  Requires-Dist: sqlglot==27.28.1; extra == "dev"
125
126
  Provides-Extra: full
@@ -172,6 +173,8 @@ Dynamic: license-file
172
173
  [![Security](https://github.com/YUCONGGEN/springbootAI/actions/workflows/security.yml/badge.svg?branch=master)](https://github.com/YUCONGGEN/springbootAI/actions/workflows/security.yml)
173
174
  [![License](https://img.shields.io/pypi/l/springbootAI)](https://github.com/YUCONGGEN/springbootAI/blob/master/LICENSE)
174
175
 
176
+ > 感谢阿里、华为、讯飞、心之声、字节、OpenAI、DeepSeek 等公司的支持。
177
+
175
178
  ## SpringBootAI 考试认证与证书
176
179
 
177
180
  SpringBootAI 已提供配套的在线考试认证平台,学习者、团队成员和项目使用方可以通过认证考试检验自己对框架核心能力的掌握情况,并在通过考试后获得对应证书。
@@ -216,7 +219,7 @@ SpringBootAI 是一个采用 Spring 风格注解和分层结构的 Python 应用
216
219
  | AI 与编排 | 模型调用、Tools、RAG、Chain、状态图、MCP client/server | LangChain / LangGraph / 官方 MCP SDK |
217
220
  | 生产治理 | 健康检查、Prometheus、限流熔断、追踪、Swagger | prometheus-client / OpenTelemetry / OpenAPI |
218
221
 
219
- 当前版本是 `2.3.9`;支持 Python 3.10、3.11 和 3.12,许可证为 MIT。项目仍标记为 Beta。用于公网高并发、合规敏感或支付/订单/库存等核心系统前,必须完成目标数据库、流量模型、故障恢复和安全基线验证。内嵌 Gateway 适合内部路由,不替代公网 Nginx/Kong/WAF;Seata `distributed` 对接官方 TC + TCC 回调;`at` 模式通过 ORM 拦截器自动生成 undo_log 实现自动回滚。
222
+ 当前版本是 `2.3.11`;支持 Python 3.10、3.11 和 3.12,许可证为 MIT。项目仍标记为 Beta。用于公网高并发、合规敏感或支付/订单/库存等核心系统前,必须完成目标数据库、流量模型、故障恢复和安全基线验证。内嵌 Gateway 适合内部路由,不替代公网 Nginx/Kong/WAF;Seata `distributed` 对接官方 TC + TCC 回调;`at` 是无 TC 全局锁的单进程受限补偿模式,不应当作跨服务强一致方案。
220
223
 
221
224
  [新手指南](https://github.com/YUCONGGEN/springbootAI/blob/master/doc/BEGINNER_GUIDE.md) | [全部文档](https://github.com/YUCONGGEN/springbootAI/tree/master/doc) | [变更日志](https://github.com/YUCONGGEN/springbootAI/blob/master/CHANGELOG.md) | [安全报告](https://github.com/YUCONGGEN/springbootAI/blob/master/SECURITY.md) | [发布检查](https://github.com/YUCONGGEN/springbootAI/blob/master/doc/RELEASE_CHECKLIST.md)
222
225
 
@@ -347,10 +350,10 @@ SpringBootAI 是一个 **Python Web 框架**。它把 Java Spring Boot 的"注
347
350
 
348
351
  | 组件 | 当前版本 |
349
352
  |------|----------|
350
- | `springbootai` 框架 API | 2.3.9 |
351
- | `springbootai.orm.pymybatis` | 2.3.9 |
352
- | `springbootai.ai` AI 模块 | 2.3.9 |
353
- | `springbootai.langchain` LangChain 模块 | 2.3.9 |
353
+ | `springbootai` 框架 API | 2.3.11 |
354
+ | `springbootai.orm.pymybatis` | 2.3.11 |
355
+ | `springbootai.ai` AI 模块 | 2.3.11 |
356
+ | `springbootai.langchain` LangChain 模块 | 2.3.11 |
354
357
  | Python | 3.10+ |
355
358
 
356
359
  ### 1.4 适合什么场景
@@ -366,7 +369,7 @@ SpringBootAI 是一个 **Python Web 框架**。它把 Java Spring Boot 的"注
366
369
  - `@Transactional` 支持七种 Spring 传播模式;`REQUIRES_NEW` 和 `NOT_SUPPORTED` 需要连接池有额外可用连接。
367
370
  - Profile 会筛选 `@Profile` Bean,并深度合并同目录的 `application-{profile}.yml`。
368
371
  - Nacos、RabbitMQ、Prometheus 依赖外部服务;Sentinel 限流熔断和 OpenTelemetry 追踪可内嵌运行。
369
- - HTTP 事务模式是持久化补偿协调器;`distributed` 模式提供真实 Seata TC + TCC 回调;`at` 模式通过 ORM 拦截器自动记录 undo_log 并在回滚时反向恢复数据。
372
+ - HTTP 事务模式是持久化补偿协调器;`distributed` 模式提供真实 Seata TC + TCC 回调;`at` 模式通过 ORM 拦截器记录 undo_log,但仅提供单进程、单数据库的受限补偿。
370
373
  - 限流、分布式锁、幂等和缓存语义依赖 Redis 等后端;核心业务必须选择 fail-closed,不能依赖进程内降级继续提供分布式语义。
371
374
 
372
375
  ### 1.6 注解使用总览
@@ -401,7 +404,7 @@ SpringBootAI 注解会先把元数据放到 `__spring_annotations__`。之后是
401
404
  | Nacos 服务发现 | ✅ 可用 | 服务注册/发现/订阅 |
402
405
  | Sentinel 限流熔断 | ✅ 可用 | 内嵌引擎,QPS 限流、异常比例熔断、热点参数限流,无需 Dashboard |
403
406
  | 分布式追踪 | ✅ 可用 | 原生 OpenTelemetry(W3C traceparent),自动 HTTP/Feign 注入 |
404
- | Seata 分布式事务 | ✅ 可用 | `distributed` 对接真实 Seata TC 执行 TCC 回调;`at` 模式通过 ORM 拦截器自动记录 undo_log 并反向恢复;`http` 提供持久化补偿 |
407
+ | Seata 分布式事务 | ✅ 有条件可用 | `distributed` 对接真实 Seata TC 执行 TCC 回调;`at` 仅为无全局锁的单进程受限补偿;`http` 提供持久化补偿 |
405
408
  | API Gateway | ✅ 可用 | 轻量 ASGI/WSGI 网关,路由转发、路径重写、过滤器链、负载均衡 |
406
409
  | Prometheus 监控 | ✅ 可用 | Counter/Gauge/Histogram 指标暴露 |
407
410
  | Feign 声明式 HTTP | ✅ 可用 | 声明式接口、Fallback 降级、自动传播 XID 和 trace 头 |
@@ -905,7 +908,7 @@ class AppService:
905
908
  self.app_name = value
906
909
 
907
910
  @Component
908
- @ConfigurationProperties(prefix="springbootai.datasource")
911
+ @ConfigurationProperties(prefix="database")
909
912
  class DataSourceProperties:
910
913
  def __init__(self):
911
914
  self.url = ""
@@ -18,6 +18,7 @@ springbootAI.egg-info/top_level.txt
18
18
  springbootai/__init__.py
19
19
  springbootai/devtools.py
20
20
  springbootai/main.py
21
+ springbootai/py.typed
21
22
  springbootai/ai/__init__.py
22
23
  springbootai/ai/advisors.py
23
24
  springbootai/ai/annotation_runtime.py
@@ -304,7 +305,10 @@ tests/test_declarative_aop_post_authorize_recover.py
304
305
  tests/test_devtools.py
305
306
  tests/test_devtools_lifecycle_hardening.py
306
307
  tests/test_di_config_event_full.py
308
+ tests/test_enterprise_safety_regressions.py
307
309
  tests/test_excel_module.py
310
+ tests/test_final_enterprise_hardening.py
311
+ tests/test_followup_enterprise_fixes.py
308
312
  tests/test_hateoas.py
309
313
  tests/test_i18n_module.py
310
314
  tests/test_io_http_logging_hardening.py
@@ -316,6 +320,7 @@ tests/test_langchain_ext.py
316
320
  tests/test_langchain_module.py
317
321
  tests/test_langgraph_comprehensive.py
318
322
  tests/test_langgraph_module.py
323
+ tests/test_latest_enterprise_audit_fixes.py
319
324
  tests/test_logging_config.py
320
325
  tests/test_lombok_annotations.py
321
326
  tests/test_mcp_module.py
@@ -327,9 +332,11 @@ tests/test_new_features.py
327
332
  tests/test_oauth2.py
328
333
  tests/test_optional_component_timeouts.py
329
334
  tests/test_orm_pymybatis_full.py
335
+ tests/test_post_audit_enterprise_fixes.py
330
336
  tests/test_production_readiness.py
331
337
  tests/test_pymybatis_configuration_hardening.py
332
338
  tests/test_pymybatis_contract.py
339
+ tests/test_remaining_enterprise_hardening.py
333
340
  tests/test_request_metrics.py
334
341
  tests/test_retry.py
335
342
  tests/test_runtime_configuration_fixes.py