sycommon-python-lib 0.2.10a2__tar.gz → 0.2.10a4__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 (368) hide show
  1. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/PKG-INFO +13 -13
  2. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/pyproject.toml +13 -13
  3. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycommon/agent/deep_agent.py +5 -0
  4. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycommon/agent/middleware/sensitive_guard.py +7 -1
  5. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycommon/agent/multi_agent_team.py +1 -0
  6. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycommon/database/async_database_service.py +5 -1
  7. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycommon/database/database_service.py +44 -2
  8. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycommon/database/redis_service.py +18 -0
  9. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycommon/database/token_usage_db_service.py +36 -2
  10. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycommon/heartbeat_process/heartbeat_process_worker.py +3 -0
  11. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycommon/middleware/traceid.py +1 -1
  12. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycommon/models/base_http.py +35 -7
  13. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycommon/notice/uvicorn_monitor.py +31 -20
  14. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycommon/synacos/nacos_client_base.py +6 -0
  15. sycommon_python_lib-0.2.10a4/src/sycommon/tests/test_db_keepalive.py +178 -0
  16. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycommon/tests/test_upgrade_verification.py +7 -7
  17. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycommon_python_lib.egg-info/PKG-INFO +13 -13
  18. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycommon_python_lib.egg-info/SOURCES.txt +1 -0
  19. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycommon_python_lib.egg-info/requires.txt +12 -12
  20. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/README.md +0 -0
  21. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/setup.cfg +0 -0
  22. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/command/__init__.py +0 -0
  23. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/command/cli.py +0 -0
  24. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/command/core/__init__.py +0 -0
  25. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/command/core/console.py +0 -0
  26. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/command/core/models.py +0 -0
  27. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/command/core/project.py +0 -0
  28. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/command/core/utils.py +0 -0
  29. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/command/templates/__init__.py +0 -0
  30. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/command/templates/agent/README.md.tpl +0 -0
  31. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/command/templates/agent/__init__.py +0 -0
  32. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/command/templates/agent/agent/__init__.py.tpl +0 -0
  33. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/command/templates/agent/agent/main_agent.py.tpl +0 -0
  34. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/command/templates/agent/agent/nodes/__init__.py.tpl +0 -0
  35. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/command/templates/agent/agent/nodes/example_node.py.tpl +0 -0
  36. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/command/templates/agent/agent/states/__init__.py.tpl +0 -0
  37. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/command/templates/agent/agent/states/agent_state.py.tpl +0 -0
  38. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/command/templates/agent/api/__init__.py.tpl +0 -0
  39. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/command/templates/agent/api/query.py.tpl +0 -0
  40. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/command/templates/agent/api/sse/__init__.py.tpl +0 -0
  41. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/command/templates/agent/api/sse/agent.py.tpl +0 -0
  42. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/command/templates/agent/app.py.tpl +0 -0
  43. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/command/templates/agent/client/__init__.py.tpl +0 -0
  44. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/command/templates/agent/db/__init__.py.tpl +0 -0
  45. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/command/templates/agent/db/model/__init__.py.tpl +0 -0
  46. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/command/templates/agent/db/model/entity.py.tpl +0 -0
  47. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/command/templates/agent/db/service.py.tpl +0 -0
  48. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/command/templates/agent/model/__init__.py.tpl +0 -0
  49. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/command/templates/agent/model/parse.py.tpl +0 -0
  50. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/command/templates/agent/tools/__init__.py.tpl +0 -0
  51. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/command/templates/agent/tools/mq.py.tpl +0 -0
  52. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/command/templates/base/.env.tpl +0 -0
  53. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/command/templates/base/.gitignore.tpl +0 -0
  54. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/command/templates/base/Dockerfile.tpl +0 -0
  55. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/command/templates/base/README.md.tpl +0 -0
  56. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/command/templates/base/__init__.py +0 -0
  57. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/command/templates/base/app.py.tpl +0 -0
  58. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/command/templates/base/app.yaml.tpl +0 -0
  59. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/command/templates/base/client/FileServiceClient.py.tpl +0 -0
  60. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/command/templates/base/client/__init__.py.tpl +0 -0
  61. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/command/templates/base/model/__init__.py.tpl +0 -0
  62. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/command/templates/base/model/file_info.py.tpl +0 -0
  63. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/command/templates/base/requirements.txt.tpl +0 -0
  64. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/command/templates/cli/README.md.tpl +0 -0
  65. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/command/templates/cli/__init__.py +0 -0
  66. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/command/templates/cli/app.py.tpl +0 -0
  67. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/command/templates/cli/commands/__init__.py.tpl +0 -0
  68. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/command/templates/cli/commands/hello.py.tpl +0 -0
  69. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/command/templates/cli/pyproject.toml.tpl +0 -0
  70. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/command/templates/cli/tools/__init__.py.tpl +0 -0
  71. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/command/templates/web/README.md.tpl +0 -0
  72. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/command/templates/web/__init__.py +0 -0
  73. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/command/templates/web/api/__init__.py.tpl +0 -0
  74. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/command/templates/web/api/echo.py.tpl +0 -0
  75. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/command/templates/web/api/sse/__init__.py.tpl +0 -0
  76. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/command/templates/web/api/sse/echo.py.tpl +0 -0
  77. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/command/templates/web/app.py.tpl +0 -0
  78. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/command/templates/web/client/__init__.py.tpl +0 -0
  79. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/command/templates/web/model/__init__.py.tpl +0 -0
  80. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/command/templates/web/tools/__init__.py.tpl +0 -0
  81. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/command/templates/web/tools/mq.py.tpl +0 -0
  82. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/nexus/__init__.py +0 -0
  83. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycli/__init__.py +0 -0
  84. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycli/__main__.py +0 -0
  85. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycli/acp/__init__.py +0 -0
  86. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycli/acp/config.py +0 -0
  87. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycli/acp/executor.py +0 -0
  88. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycli/acp/registry.py +0 -0
  89. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycli/acp/server.py +0 -0
  90. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycli/agents/__init__.py +0 -0
  91. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycli/agents/factory.py +0 -0
  92. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycli/agents/prompts.py +0 -0
  93. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycli/cdp/__init__.py +0 -0
  94. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycli/cdp/browser.py +0 -0
  95. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycli/cdp/capabilities/__init__.py +0 -0
  96. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycli/cdp/capabilities/console.py +0 -0
  97. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycli/cdp/capabilities/dom.py +0 -0
  98. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycli/cdp/capabilities/network.py +0 -0
  99. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycli/cdp/capabilities/page_errors.py +0 -0
  100. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycli/cdp/capabilities/performance.py +0 -0
  101. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycli/cdp/capabilities/screenshot.py +0 -0
  102. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycli/cdp/client.py +0 -0
  103. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycli/cdp/protocol.py +0 -0
  104. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycli/cdp/repl.py +0 -0
  105. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycli/cli.py +0 -0
  106. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycli/commands/__init__.py +0 -0
  107. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycli/commands/acp_cmd.py +0 -0
  108. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycli/commands/acp_serve_cmd.py +0 -0
  109. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycli/commands/cdp_cmd.py +0 -0
  110. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycli/commands/chat_cmd.py +0 -0
  111. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycli/commands/create_cmd.py +0 -0
  112. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycli/commands/evaluate_cmd.py +0 -0
  113. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycli/commands/init_cmd.py +0 -0
  114. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycli/commands/memory_cmd.py +0 -0
  115. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycli/commands/resume_cmd.py +0 -0
  116. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycli/commands/rollback_cmd.py +0 -0
  117. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycli/commands/run_cmd.py +0 -0
  118. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycli/core/__init__.py +0 -0
  119. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycli/core/backend.py +0 -0
  120. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycli/core/config.py +0 -0
  121. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycli/core/display.py +0 -0
  122. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycli/core/git_integration.py +0 -0
  123. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycli/core/llm.py +0 -0
  124. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycli/core/state.py +0 -0
  125. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycli/evaluate/__init__.py +0 -0
  126. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycli/evaluate/api_evaluator.py +0 -0
  127. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycli/memory/__init__.py +0 -0
  128. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycli/memory/compressor.py +0 -0
  129. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycli/memory/full.py +0 -0
  130. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycli/memory/hot.py +0 -0
  131. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycli/memory/manager.py +0 -0
  132. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycli/memory/warm.py +0 -0
  133. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycli/mode/__init__.py +0 -0
  134. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycli/mode/create.py +0 -0
  135. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycli/mode/optimize.py +0 -0
  136. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycli/models/__init__.py +0 -0
  137. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycli/models/config_models.py +0 -0
  138. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycli/rl/__init__.py +0 -0
  139. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycli/rl/baseline_tests.py +0 -0
  140. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycli/rl/checkpoint.py +0 -0
  141. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycli/rl/convergence.py +0 -0
  142. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycli/rl/diagnosis.py +0 -0
  143. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycli/rl/engine.py +0 -0
  144. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycli/rl/environment.py +0 -0
  145. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycli/rl/experience.py +0 -0
  146. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycli/rl/harness_prompts.py +0 -0
  147. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycli/rl/history.py +0 -0
  148. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycli/rl/optimization_logger.py +0 -0
  149. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycli/rl/pre_validation.py +0 -0
  150. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycli/rl/reward.py +0 -0
  151. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycli/rl/strategy_bandit.py +0 -0
  152. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycli/rl/strategy_generator.py +0 -0
  153. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycli/rl/strategy_prompts.py +0 -0
  154. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycli/simple_chat_agent.py +0 -0
  155. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycli/skills/__init__.py +0 -0
  156. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycommon/__init__.py +0 -0
  157. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycommon/agent/__init__.py +0 -0
  158. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycommon/agent/acp/__init__.py +0 -0
  159. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycommon/agent/acp/client.py +0 -0
  160. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycommon/agent/acp/fetch.py +0 -0
  161. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycommon/agent/acp/server_adapter.py +0 -0
  162. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycommon/agent/acp/ssh_init.py +0 -0
  163. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycommon/agent/acp/tool.py +0 -0
  164. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycommon/agent/agent_manager.py +0 -0
  165. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycommon/agent/chat_events.py +0 -0
  166. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycommon/agent/mcp/__init__.py +0 -0
  167. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycommon/agent/mcp/models.py +0 -0
  168. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycommon/agent/mcp/tool_loader.py +0 -0
  169. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycommon/agent/middleware/model_request_prep.py +0 -0
  170. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycommon/agent/middleware/sandbox_path_guard.py +0 -0
  171. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycommon/agent/middleware/skill_write_guard.py +0 -0
  172. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycommon/agent/reasoning_content_patch.py +0 -0
  173. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycommon/agent/resume_compactor.py +0 -0
  174. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycommon/agent/sandbox/__init__.py +0 -0
  175. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycommon/agent/sandbox/consistent_hash.py +0 -0
  176. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycommon/agent/sandbox/file_ops.py +0 -0
  177. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycommon/agent/sandbox/http_sandbox_backend.py +0 -0
  178. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycommon/agent/sandbox/minio_sync.py +0 -0
  179. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycommon/agent/sandbox/sandbox_pool.py +0 -0
  180. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycommon/agent/sandbox/sandbox_recovery.py +0 -0
  181. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycommon/agent/sandbox/session.py +0 -0
  182. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycommon/agent/skills_retry_patch.py +0 -0
  183. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycommon/agent/summarization_utils.py +0 -0
  184. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycommon/auth/__init__.py +0 -0
  185. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycommon/auth/ldap_service.py +0 -0
  186. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycommon/auth/oa_cache.py +0 -0
  187. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycommon/auth/oa_crypto.py +0 -0
  188. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycommon/auth/oa_service.py +0 -0
  189. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycommon/auth/wecom_ldap_service.py +0 -0
  190. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycommon/config/ACPAgentConfig.py +0 -0
  191. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycommon/config/Config.py +0 -0
  192. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycommon/config/DatabaseConfig.py +0 -0
  193. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycommon/config/EgressPolicyConfig.py +0 -0
  194. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycommon/config/ElasticsearchConfig.py +0 -0
  195. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycommon/config/EmbeddingConfig.py +0 -0
  196. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycommon/config/LLMConfig.py +0 -0
  197. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycommon/config/LangfuseConfig.py +0 -0
  198. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycommon/config/MQConfig.py +0 -0
  199. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycommon/config/PgConfig.py +0 -0
  200. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycommon/config/RedisConfig.py +0 -0
  201. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycommon/config/RerankerConfig.py +0 -0
  202. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycommon/config/SentryConfig.py +0 -0
  203. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycommon/config/XxlJobConfig.py +0 -0
  204. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycommon/config/__init__.py +0 -0
  205. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycommon/config/config_change_notifier.py +0 -0
  206. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycommon/database/async_base_db_service.py +0 -0
  207. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycommon/database/base_db_service.py +0 -0
  208. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycommon/database/elasticsearch_service.py +0 -0
  209. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycommon/database/pg_checkpoint_service.py +0 -0
  210. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycommon/database/resilient_pg_saver.py +0 -0
  211. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycommon/health/__init__.py +0 -0
  212. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycommon/health/health_check.py +0 -0
  213. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycommon/health/metrics.py +0 -0
  214. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycommon/health/ping.py +0 -0
  215. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycommon/heartbeat_process/__init__.py +0 -0
  216. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycommon/heartbeat_process/heartbeat_config.py +0 -0
  217. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycommon/heartbeat_process/heartbeat_process_manager.py +0 -0
  218. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycommon/llm/__init__.py +0 -0
  219. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycommon/llm/embedding.py +0 -0
  220. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycommon/llm/get_llm.py +0 -0
  221. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycommon/llm/llm_logger.py +0 -0
  222. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycommon/llm/llm_tokens.py +0 -0
  223. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycommon/llm/llm_with_token_tracking.py +0 -0
  224. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycommon/llm/native_with_fallback_runnable.py +0 -0
  225. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycommon/llm/output_fixing_runnable.py +0 -0
  226. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycommon/llm/struct_token.py +0 -0
  227. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycommon/llm/sy_langfuse.py +0 -0
  228. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycommon/llm/tiktoken_cache/9b5ad71b2ce5302211f9c61530b329a4922fc6a4 +0 -0
  229. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycommon/llm/tiktoken_cache/fb374d419588a4632f3f557e76b4b70aebbca790 +0 -0
  230. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycommon/llm/token_usage_es_service.py +0 -0
  231. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycommon/llm/token_usage_mysql_service.py +0 -0
  232. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycommon/llm/token_utils.py +0 -0
  233. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycommon/llm/usage_token.py +0 -0
  234. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycommon/logging/__init__.py +0 -0
  235. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycommon/logging/async_sql_logger.py +0 -0
  236. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycommon/logging/kafka_log.py +0 -0
  237. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycommon/logging/log_masker.py +0 -0
  238. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycommon/logging/logger_levels.py +0 -0
  239. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycommon/logging/logger_wrapper.py +0 -0
  240. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycommon/logging/process_logger.py +0 -0
  241. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycommon/logging/sql_logger.py +0 -0
  242. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycommon/mcp_server/__init__.py +0 -0
  243. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycommon/mcp_server/server.py +0 -0
  244. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycommon/middleware/__init__.py +0 -0
  245. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycommon/middleware/context.py +0 -0
  246. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycommon/middleware/cors.py +0 -0
  247. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycommon/middleware/docs.py +0 -0
  248. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycommon/middleware/egress_wall.py +0 -0
  249. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycommon/middleware/exception.py +0 -0
  250. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycommon/middleware/middleware.py +0 -0
  251. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycommon/middleware/monitor_memory.py +0 -0
  252. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycommon/middleware/mq.py +0 -0
  253. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycommon/middleware/sandbox.py +0 -0
  254. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycommon/middleware/sandbox_gateway.py +0 -0
  255. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycommon/middleware/timeout.py +0 -0
  256. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycommon/middleware/token_tracking.py +0 -0
  257. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycommon/middleware/tool_result_truncation.py +0 -0
  258. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycommon/models/__init__.py +0 -0
  259. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycommon/models/log.py +0 -0
  260. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycommon/models/mcp_server_config.py +0 -0
  261. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycommon/models/mqlistener_config.py +0 -0
  262. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycommon/models/mqmsg_model.py +0 -0
  263. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycommon/models/mqsend_config.py +0 -0
  264. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycommon/models/sandbox.py +0 -0
  265. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycommon/models/sso_user.py +0 -0
  266. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycommon/models/token_usage.py +0 -0
  267. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycommon/models/token_usage_mysql.py +0 -0
  268. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycommon/models/xxljob_handler_config.py +0 -0
  269. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycommon/notice/__init__.py +0 -0
  270. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycommon/notice/wecom_message.py +0 -0
  271. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycommon/rabbitmq/process_pool_consumer.py +0 -0
  272. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycommon/rabbitmq/rabbit_management_client.py +0 -0
  273. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycommon/rabbitmq/rabbitmq_client.py +0 -0
  274. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycommon/rabbitmq/rabbitmq_pool.py +0 -0
  275. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycommon/rabbitmq/rabbitmq_service.py +0 -0
  276. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycommon/rabbitmq/rabbitmq_service_client_manager.py +0 -0
  277. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycommon/rabbitmq/rabbitmq_service_connection_monitor.py +0 -0
  278. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycommon/rabbitmq/rabbitmq_service_consumer_manager.py +0 -0
  279. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycommon/rabbitmq/rabbitmq_service_core.py +0 -0
  280. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycommon/rabbitmq/rabbitmq_service_producer_manager.py +0 -0
  281. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycommon/sentry/__init__.py +0 -0
  282. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycommon/sentry/sy_sentry.py +0 -0
  283. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycommon/services.py +0 -0
  284. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycommon/sse/__init__.py +0 -0
  285. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycommon/sse/event.py +0 -0
  286. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycommon/sse/sse.py +0 -0
  287. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycommon/synacos/__init__.py +0 -0
  288. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycommon/synacos/example.py +0 -0
  289. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycommon/synacos/example2.py +0 -0
  290. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycommon/synacos/feign.py +0 -0
  291. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycommon/synacos/feign_client.py +0 -0
  292. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycommon/synacos/nacos_config_manager.py +0 -0
  293. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycommon/synacos/nacos_heartbeat_manager.py +0 -0
  294. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycommon/synacos/nacos_service.py +0 -0
  295. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycommon/synacos/nacos_service_discovery.py +0 -0
  296. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycommon/synacos/nacos_service_registration.py +0 -0
  297. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycommon/synacos/param.py +0 -0
  298. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycommon/tests/deep_agent_server.py +0 -0
  299. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycommon/tests/test_backend_factory_compat.py +0 -0
  300. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycommon/tests/test_consistent_hash.py +0 -0
  301. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycommon/tests/test_consume_dedup.py +0 -0
  302. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycommon/tests/test_consumer_broker_health.py +0 -0
  303. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycommon/tests/test_consumer_loss_rootcause.py +0 -0
  304. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycommon/tests/test_consumer_recovery.py +0 -0
  305. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycommon/tests/test_consumer_recovery_fix.py +0 -0
  306. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycommon/tests/test_consumer_tags_sync.py +0 -0
  307. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycommon/tests/test_deep_agent.py +0 -0
  308. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycommon/tests/test_dynamic_max_tokens.py +0 -0
  309. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycommon/tests/test_email.py +0 -0
  310. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycommon/tests/test_encoding_cache.py +0 -0
  311. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycommon/tests/test_env_tenant_helper.py +0 -0
  312. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycommon/tests/test_exp_concurrent_migrate.py +0 -0
  313. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycommon/tests/test_exp_delete_queue_with_consumers.py +0 -0
  314. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycommon/tests/test_fault_injection_real.py +0 -0
  315. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycommon/tests/test_fix_verification.py +0 -0
  316. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycommon/tests/test_heartbeat_timeout.py +0 -0
  317. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycommon/tests/test_integration_real_broker.py +0 -0
  318. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycommon/tests/test_mcp_server.py +0 -0
  319. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycommon/tests/test_minimax_reasoning.py +0 -0
  320. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycommon/tests/test_mq.py +0 -0
  321. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycommon/tests/test_mq_config_driven.py +0 -0
  322. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycommon/tests/test_nacos_llm_real.py +0 -0
  323. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycommon/tests/test_oa_login.py +0 -0
  324. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycommon/tests/test_queue_priority_fallback.py +0 -0
  325. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycommon/tests/test_queue_priority_upgrade_timing.py +0 -0
  326. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycommon/tests/test_real_summarization.py +0 -0
  327. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycommon/tests/test_reconnect_scenarios.py +0 -0
  328. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycommon/tests/test_sandbox_glob_hardening.py +0 -0
  329. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycommon/tests/test_summarization_config.py +0 -0
  330. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycommon/tests/test_summarization_real.py +0 -0
  331. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycommon/tests/test_summary_leak_e2e.py +0 -0
  332. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycommon/tests/test_upgrade_aio_pika.py +0 -0
  333. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycommon/tests/test_upgrade_langgraph_stream.py +0 -0
  334. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycommon/tools/__init__.py +0 -0
  335. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycommon/tools/async_utils.py +0 -0
  336. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycommon/tools/docs.py +0 -0
  337. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycommon/tools/env.py +0 -0
  338. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycommon/tools/merge_headers.py +0 -0
  339. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycommon/tools/snowflake.py +0 -0
  340. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycommon/tools/syemail.py +0 -0
  341. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycommon/tools/time_utils.py +0 -0
  342. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycommon/tools/timing.py +0 -0
  343. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycommon/tools/user_id.py +0 -0
  344. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycommon/xxljob/__init__.py +0 -0
  345. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycommon/xxljob/xxljob_service.py +0 -0
  346. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycommon_python_lib.egg-info/dependency_links.txt +0 -0
  347. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycommon_python_lib.egg-info/entry_points.txt +0 -0
  348. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/src/sycommon_python_lib.egg-info/top_level.txt +0 -0
  349. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/tests/test_acp_tool.py +0 -0
  350. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/tests/test_asyncio_logging.py +0 -0
  351. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/tests/test_config_change_notifier.py +0 -0
  352. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/tests/test_hotreload_snapshot.py +0 -0
  353. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/tests/test_llm_apikey_contextvar.py +0 -0
  354. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/tests/test_log_masker.py +0 -0
  355. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/tests/test_resilient_pg_saver.py +0 -0
  356. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/tests/test_sandbox_path_guard.py +0 -0
  357. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/tests/test_sensitive_guard.py +0 -0
  358. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/tests/test_simple_chat_agent.py +0 -0
  359. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/tests/test_skill_regex_upgrade.py +0 -0
  360. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/tests/test_skill_write_guard.py +0 -0
  361. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/tests/test_streaming_e2e.py +0 -0
  362. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/tests/test_sycli.py +0 -0
  363. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/tests/test_sylogger_fixes.py +0 -0
  364. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/tests/test_sync_skills_to_sandbox.py +0 -0
  365. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/tests/test_time_utils.py +0 -0
  366. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/tests/test_traceid_omit_base64.py +0 -0
  367. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/tests/test_upload_concurrency.py +0 -0
  368. {sycommon_python_lib-0.2.10a2 → sycommon_python_lib-0.2.10a4}/tests/test_upload_e2e_http.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: sycommon-python-lib
3
- Version: 0.2.10a2
3
+ Version: 0.2.10a4
4
4
  Summary: Add your description here
5
5
  Requires-Python: >=3.11
6
6
  Description-Content-Type: text/markdown
@@ -13,36 +13,36 @@ Requires-Dist: deepagents==0.7.6
13
13
  Requires-Dist: elasticsearch==9.5.0
14
14
  Requires-Dist: fastapi==0.141.1
15
15
  Requires-Dist: jinja2==3.1.6
16
- Requires-Dist: kafka-python==3.0.10
17
- Requires-Dist: langchain==1.3.15
18
- Requires-Dist: langchain-core==1.5.5
19
- Requires-Dist: langchain-openai==1.5.1
20
- Requires-Dist: langfuse==4.14.4
16
+ Requires-Dist: kafka-python==3.0.11
17
+ Requires-Dist: langchain==1.3.18
18
+ Requires-Dist: langchain-core==1.6.1
19
+ Requires-Dist: langchain-openai==1.6.0
20
+ Requires-Dist: langfuse==4.15.1
21
21
  Requires-Dist: langgraph==1.2.11
22
22
  Requires-Dist: langgraph-checkpoint-postgres==3.1.2
23
- Requires-Dist: langgraph-checkpoint-redis==0.5.1
23
+ Requires-Dist: langgraph-checkpoint-redis==0.5.2
24
24
  Requires-Dist: ldap3==2.9.1
25
25
  Requires-Dist: loguru==0.7.3
26
26
  Requires-Dist: mysql-connector-python==26.7.0
27
27
  Requires-Dist: nacos-sdk-python<3.0,==2.0.11
28
28
  Requires-Dist: psutil==7.2.2
29
29
  Requires-Dist: pyxxl==0.4.8
30
- Requires-Dist: pydantic==2.13.4
31
- Requires-Dist: python-dotenv==1.2.2
30
+ Requires-Dist: pydantic==2.13.5
31
+ Requires-Dist: python-dotenv==1.2.3
32
32
  Requires-Dist: python-multipart==0.0.32
33
33
  Requires-Dist: pyyaml==6.0.3
34
34
  Requires-Dist: redis==7.4.0
35
- Requires-Dist: sentry-sdk[fastapi]==2.68.0
35
+ Requires-Dist: sentry-sdk[fastapi]==2.68.1
36
36
  Requires-Dist: sqlalchemy[asyncio]==2.0.52
37
37
  Requires-Dist: starlette[full]==1.6.0
38
- Requires-Dist: tiktoken==0.13.0
39
- Requires-Dist: uvicorn==0.52.3
38
+ Requires-Dist: tiktoken==0.14.0
39
+ Requires-Dist: uvicorn==0.52.4
40
40
  Requires-Dist: wecom-aibot-python-sdk==1.0.2
41
41
  Requires-Dist: twine==7.0.0
42
42
  Requires-Dist: minio==7.2.20
43
43
  Requires-Dist: langchain-mcp-adapters==0.3.2
44
44
  Requires-Dist: fastapi-mcp==0.4.0
45
- Requires-Dist: psycopg[binary,pool]==3.3.4
45
+ Requires-Dist: psycopg[binary,pool]==3.3.5
46
46
  Requires-Dist: agent-client-protocol==0.11.0
47
47
  Requires-Dist: langchain-acp==1.7.0
48
48
  Requires-Dist: pypinyin==0.55.0
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "sycommon-python-lib"
3
- version = "0.2.10a2"
3
+ version = "0.2.10a4"
4
4
  description = "Add your description here"
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.11"
@@ -14,36 +14,36 @@ dependencies = [
14
14
  "elasticsearch==9.5.0",
15
15
  "fastapi==0.141.1",
16
16
  "jinja2==3.1.6",
17
- "kafka-python==3.0.10",
18
- "langchain==1.3.15",
19
- "langchain-core==1.5.5",
20
- "langchain-openai==1.5.1",
21
- "langfuse==4.14.4",
17
+ "kafka-python==3.0.11",
18
+ "langchain==1.3.18",
19
+ "langchain-core==1.6.1",
20
+ "langchain-openai==1.6.0",
21
+ "langfuse==4.15.1",
22
22
  "langgraph==1.2.11",
23
23
  "langgraph-checkpoint-postgres==3.1.2",
24
- "langgraph-checkpoint-redis==0.5.1",
24
+ "langgraph-checkpoint-redis==0.5.2",
25
25
  "ldap3==2.9.1",
26
26
  "loguru==0.7.3",
27
27
  "mysql-connector-python==26.7.0",
28
28
  "nacos-sdk-python==2.0.11,<3.0",
29
29
  "psutil==7.2.2",
30
30
  "pyxxl==0.4.8",
31
- "pydantic==2.13.4",
32
- "python-dotenv==1.2.2",
31
+ "pydantic==2.13.5",
32
+ "python-dotenv==1.2.3",
33
33
  "python-multipart==0.0.32",
34
34
  "pyyaml==6.0.3",
35
35
  "redis==7.4.0",
36
- "sentry-sdk[fastapi]==2.68.0",
36
+ "sentry-sdk[fastapi]==2.68.1",
37
37
  "sqlalchemy[asyncio]==2.0.52",
38
38
  "starlette[full]==1.6.0",
39
- "tiktoken==0.13.0",
40
- "uvicorn==0.52.3",
39
+ "tiktoken==0.14.0",
40
+ "uvicorn==0.52.4",
41
41
  "wecom-aibot-python-sdk==1.0.2",
42
42
  "twine==7.0.0",
43
43
  "minio==7.2.20",
44
44
  "langchain-mcp-adapters==0.3.2",
45
45
  "fastapi-mcp==0.4.0",
46
- "psycopg[binary,pool]==3.3.4",
46
+ "psycopg[binary,pool]==3.3.5",
47
47
  "agent-client-protocol==0.11.0",
48
48
  "langchain-acp==1.7.0",
49
49
  "pypinyin==0.55.0",
@@ -180,6 +180,10 @@ class AgentConfig(BaseModel):
180
180
  sensitive_guard: bool = True # 是否启用敏感信息检测守卫
181
181
  # 敏感降级目标内部模型名(由应用层透传,避免基础库硬编码应用常量)
182
182
  internal_model_name: Optional[str] = None
183
+ # 敏感检测器专用模型名(可选,与降级模型解耦):
184
+ # - 传了 → 检测分类器用它(适合配更快/更准的小模型),降级生成仍用 internal_model_name
185
+ # - None → 沿用 internal_model_name(原行为,兼容存量调用方)
186
+ sensitive_detector_model_name: Optional[str] = None
183
187
  # 敏感检测提示词(应用层可覆盖);未传(None)用基础库 DEFAULT_DETECT_PROMPT
184
188
  sensitive_detect_prompt: Optional[str] = None
185
189
  # 命中敏感后的动作:"allow"=不检测放行;"downgrade"=降级内部模型继续;
@@ -1246,6 +1250,7 @@ async def create_deep_agent(
1246
1250
  model_tier=config.model_tier,
1247
1251
  enabled=config.sensitive_guard,
1248
1252
  internal_model_name=config.internal_model_name,
1253
+ detector_model_name=config.sensitive_detector_model_name,
1249
1254
  detect_prompt=config.sensitive_detect_prompt,
1250
1255
  action=config.sensitive_action,
1251
1256
  )
@@ -264,6 +264,9 @@ class SensitiveGuardMiddleware(AgentMiddleware):
264
264
  self,
265
265
  model_tier: str,
266
266
  internal_model_name: Optional[str] = None,
267
+ # 检测器专用模型名:解耦「检测分类器」与「命中后的降级生成模型」。
268
+ # None 时沿用 internal_model_name(原行为,兼容所有存量调用方)。
269
+ detector_model_name: Optional[str] = None,
267
270
  on_downgrade: Optional[Callable[[], Awaitable[None]]] = None,
268
271
  enabled: bool = True,
269
272
  state: Optional[DowngradeState] = None,
@@ -286,6 +289,9 @@ class SensitiveGuardMiddleware(AgentMiddleware):
286
289
  self._model_tier = model_tier
287
290
  # None 时检测器/降级目标都用 get_llm() 读 nacos default 模型,不写死模型名
288
291
  self._internal_name = internal_model_name
292
+ # 检测器模型:detector_model_name 优先(应用层想用更快/更准的分类器时传),
293
+ # 未传(None)回退 internal_model_name——与原行为完全一致。
294
+ self._detector_name = detector_model_name or internal_model_name
289
295
  self._on_downgrade = on_downgrade
290
296
  self._on_block = on_block
291
297
  # 默认 allow(不检测):应用层未显式指定时按"放行"处理,避免误伤。
@@ -396,7 +402,7 @@ class SensitiveGuardMiddleware(AgentMiddleware):
396
402
  # 流式回调;且这里用独立 config(不取 agent 的 StreamMessagesHandler),
397
403
  # 从源头断开检测器与用户事件流。
398
404
  self._detector = get_llm(
399
- self._internal_name, temperature=0.0, wrap_structured=False)
405
+ self._detector_name, temperature=0.0, wrap_structured=False)
400
406
  return self._detector
401
407
 
402
408
  async def _get_internal_raw(self):
@@ -684,6 +684,7 @@ async def create_multi_agent_team(
684
684
  enabled=config.sensitive_guard,
685
685
  state=shared_downgrade_state,
686
686
  internal_model_name=config.internal_model_name,
687
+ detector_model_name=config.sensitive_detector_model_name,
687
688
  detect_prompt=config.sensitive_detect_prompt,
688
689
  action=config.sensitive_action,
689
690
  detect=detect,
@@ -212,7 +212,11 @@ class AsyncDatabaseConnector:
212
212
  def tune_keepalive(dbapi_connection, connection_record):
213
213
  import socket as _socket
214
214
  try:
215
- writer = getattr(dbapi_connection, "_writer", None)
215
+ # SQLAlchemy 2.x 异步方言把 aiomysql 连接包在
216
+ # AsyncAdapt_aiomysql_connection._connection 里;老版本/裸 aiomysql
217
+ # 则直接挂 _writer。两级都探测。
218
+ inner = getattr(dbapi_connection, "_connection", dbapi_connection)
219
+ writer = getattr(inner, "_writer", None)
216
220
  transport = getattr(writer, "transport", None)
217
221
  raw_sock = transport.get_extra_info("socket") if transport else None
218
222
  if raw_sock is None:
@@ -1,3 +1,5 @@
1
+ import sys
2
+
1
3
  from sqlalchemy import create_engine, text, event
2
4
 
3
5
  from sycommon.config.Config import SingletonMeta
@@ -106,17 +108,57 @@ class DatabaseConnector(metaclass=SingletonMeta):
106
108
  SYLogger.info(f"Database URL: {safe_url}")
107
109
 
108
110
  # 优化连接池配置
111
+ # 🔑 同步引擎与异步引擎(AsyncDatabaseConnector)同源风险:池中空闲连接被中间
112
+ # 网络设备静默掐死(不回 RST)时,pre_ping 的 SELECT 1 发进黑洞,会挂到内核
113
+ # TCP 重传放弃。分驱动两层防护(实测验证,见 test_db_keepalive.py):
114
+ # - C 扩展(CMySQLConnection,装了 _mysql_driver 时默认):不暴露 Python 层
115
+ # socket,keepalive 钩子拿不到 raw socket;用 read_timeout=60 兜底——黑洞
116
+ # 读挂死 60s 后抛错,pre_ping 捕获弃连重建(真实环境已验证 SELECT SLEEP
117
+ # 按 read_timeout 抛 OperationalError)。
118
+ # - pure 实现(MySQLConnection):钩子对 _socket.sock 补 keepalive 参数,
119
+ # 死连接 ~60s 内被内核暴露为错误(与异步侧 73f2156 同一套参数)。
109
120
  self.engine = create_engine(
110
121
  self.db_url,
111
- connect_args=params,
122
+ connect_args={
123
+ **params,
124
+ "connect_timeout": 10, # TCP 建连超时(秒)
125
+ "read_timeout": 60, # 查询级读超时(秒):C 扩展拿不到 socket 时的黑洞兜底
126
+ "write_timeout": 60, # 写超时(秒):同上
127
+ },
112
128
  pool_size=10, # 连接池大小
113
129
  max_overflow=20, # 最大溢出连接数
114
130
  pool_timeout=30, # 连接超时时间(秒)
115
- pool_recycle=3600, # 连接回收时间(秒)
131
+ pool_recycle=300, # 连接回收时间(秒);赶在防火墙空闲回收窗口(常见 5-15min)前换血
116
132
  pool_pre_ping=True, # 每次获取连接前检查连接是否有效
117
133
  echo=False, # 打印 SQL 语句
118
134
  )
119
135
 
136
+ # 每个新连接补齐 TCP keepalive 参数(连接建立后才能拿到 raw socket)
137
+ @event.listens_for(self.engine, "connect")
138
+ def tune_keepalive(dbapi_connection, connection_record):
139
+ import socket as _socket
140
+ try:
141
+ # mysql-connector-python: raw socket 在 MySQLSocket 包装对象的 .sock 上
142
+ sock_wrapper = getattr(dbapi_connection, "_socket", None)
143
+ raw_sock = getattr(sock_wrapper, "sock", None)
144
+ if raw_sock is None:
145
+ return
146
+ raw_sock.setsockopt(_socket.SOL_SOCKET, _socket.SO_KEEPALIVE, 1)
147
+ if sys.platform == "win32":
148
+ # Windows: SIO_KEEPALIVE_VALS = (on/off, idle ms, interval ms)
149
+ raw_sock.ioctl(_socket.SIO_KEEPALIVE_VALS, (1, 30000, 10000))
150
+ else:
151
+ # Linux: 空闲 30s 发首个探测,每 10s 一次,3 次无回应判死(约 60s 暴露)
152
+ if hasattr(_socket, "TCP_KEEPIDLE"):
153
+ raw_sock.setsockopt(_socket.IPPROTO_TCP, _socket.TCP_KEEPIDLE, 30)
154
+ if hasattr(_socket, "TCP_KEEPINTVL"):
155
+ raw_sock.setsockopt(_socket.IPPROTO_TCP, _socket.TCP_KEEPINTVL, 10)
156
+ if hasattr(_socket, "TCP_KEEPCNT"):
157
+ raw_sock.setsockopt(_socket.IPPROTO_TCP, _socket.TCP_KEEPCNT, 3)
158
+ except Exception as e:
159
+ # keepalive 调优失败不阻断连接创建(回退内核默认)
160
+ SYLogger.warning(f"TCP keepalive 调优失败(回退默认): {e}")
161
+
120
162
  # 注册 SQL 日志拦截器
121
163
  SQLTraceLogger.setup_sql_logging(self.engine)
122
164
 
@@ -3,6 +3,8 @@ Redis 异步服务
3
3
  使用 redis-py 官方异步客户端
4
4
  """
5
5
  import logging
6
+ import socket
7
+ import sys
6
8
  from typing import Optional, Any, Union
7
9
 
8
10
  from sycommon.config.Config import SingletonMeta
@@ -32,6 +34,18 @@ class RedisService(metaclass=SingletonMeta):
32
34
  """
33
35
  cls.init(config)
34
36
 
37
+ # TCP keepalive 探测参数:空闲 30s 首探、每 10s 一次、3 次无回应判死。
38
+ # 与 MySQL 引擎同套参数(见 async_database_service.py tune_keepalive)。
39
+ # redis-py 只按平台常量透传 setsockopt;macOS 用 TCP_KEEPALIVE 表 idle。
40
+ # Windows 无 per-socket keepalive 常量(需 SIO_KEEPALIVE_VALS ioctl),
41
+ # 且其 TCP_KEEPALIVE 语义不同,透传会抛 WSAENOPROTOOPT —— 直接留空回退默认。
42
+ _KEEPALIVE_OPTIONS = {} if sys.platform == "win32" else {
43
+ getattr(socket, name, None): value
44
+ for name, value in (("TCP_KEEPIDLE", 30), ("TCP_KEEPALIVE", 30),
45
+ ("TCP_KEEPINTVL", 10), ("TCP_KEEPCNT", 3))
46
+ if getattr(socket, name, None) is not None
47
+ }
48
+
35
49
  @classmethod
36
50
  def init(cls, config: Optional[dict] = None):
37
51
  """
@@ -104,6 +118,8 @@ class RedisService(metaclass=SingletonMeta):
104
118
  db=cls._config.database,
105
119
  max_connections=max_connections,
106
120
  socket_timeout=cls._config.timeout,
121
+ socket_keepalive=True, # 开 TCP keepalive;探测参数见下方 _KEEPALIVE_OPTIONS
122
+ socket_keepalive_options=RedisService._KEEPALIVE_OPTIONS,
107
123
  decode_responses=True # 自动解码为字符串
108
124
  )
109
125
 
@@ -151,6 +167,8 @@ class RedisService(metaclass=SingletonMeta):
151
167
  cls._client = sentinel.master_for(
152
168
  sentinel_config.master,
153
169
  socket_timeout=cls._config.timeout,
170
+ socket_keepalive=True, # 与单机模式一致,防空闲连接被静默掐死
171
+ socket_keepalive_options=RedisService._KEEPALIVE_OPTIONS,
154
172
  password=cls._config.password,
155
173
  db=cls._config.database,
156
174
  decode_responses=True
@@ -3,10 +3,11 @@ Token 使用量记录专用数据库服务
3
3
  独立于业务系统的数据库连接,使用 llm 配置中的数据库信息
4
4
  """
5
5
  import logging
6
+ import sys
6
7
  from contextlib import asynccontextmanager
7
8
  from typing import Optional
8
9
 
9
- from sqlalchemy import text
10
+ from sqlalchemy import event, text
10
11
  from sqlalchemy.ext.asyncio import (
11
12
  AsyncSession,
12
13
  async_sessionmaker,
@@ -197,17 +198,50 @@ class TokenUsageDBConnector(metaclass=SingletonMeta):
197
198
 
198
199
  # 创建异步引擎(Token 记录连接池较小,增加连接超时防止慢 MySQL 拖垮主服务)
199
200
  # 4 workers × (pool_size=1 + max_overflow=2) = 12
201
+ # 🔑 TCP keepalive:与 AsyncDatabaseConnector(73f2156)同源风险——aiomysql 无查询
202
+ # 级读超时,池中死连接会让 Token 落库黑洞挂死。pool_recycle 同步降为 300,
203
+ # 赶在防火墙空闲回收窗口(常见 5-15min)前换血。
200
204
  self.engine = create_async_engine(
201
205
  self.db_url,
202
206
  connect_args={**params, "connect_timeout": 3},
203
207
  pool_size=1,
204
208
  max_overflow=2,
205
209
  pool_timeout=5,
206
- pool_recycle=3600,
210
+ pool_recycle=300,
207
211
  pool_pre_ping=True,
208
212
  echo=False,
209
213
  )
210
214
 
215
+ # 每个新连接补齐 TCP keepalive 参数(连接建立后才能拿到 raw socket)
216
+ @event.listens_for(self.engine.sync_engine, "connect")
217
+ def tune_keepalive(dbapi_connection, connection_record):
218
+ import socket as _socket
219
+ try:
220
+ # SQLAlchemy 2.x 异步方言把 aiomysql 连接包在
221
+ # AsyncAdapt_aiomysql_connection._connection 里;老版本/裸 aiomysql
222
+ # 则直接挂 _writer。两级都探测。
223
+ inner = getattr(dbapi_connection, "_connection", dbapi_connection)
224
+ writer = getattr(inner, "_writer", None)
225
+ transport = getattr(writer, "transport", None)
226
+ raw_sock = transport.get_extra_info("socket") if transport else None
227
+ if raw_sock is None:
228
+ return
229
+ raw_sock.setsockopt(_socket.SOL_SOCKET, _socket.SO_KEEPALIVE, 1)
230
+ if sys.platform == "win32":
231
+ # Windows: SIO_KEEPALIVE_VALS = (on/off, idle ms, interval ms)
232
+ raw_sock.ioctl(_socket.SIO_KEEPALIVE_VALS, (1, 30000, 10000))
233
+ else:
234
+ # Linux: 空闲 30s 发首个探测,每 10s 一次,3 次无回应判死(约 60s 暴露)
235
+ if hasattr(_socket, "TCP_KEEPIDLE"):
236
+ raw_sock.setsockopt(_socket.IPPROTO_TCP, _socket.TCP_KEEPIDLE, 30)
237
+ if hasattr(_socket, "TCP_KEEPINTVL"):
238
+ raw_sock.setsockopt(_socket.IPPROTO_TCP, _socket.TCP_KEEPINTVL, 10)
239
+ if hasattr(_socket, "TCP_KEEPCNT"):
240
+ raw_sock.setsockopt(_socket.IPPROTO_TCP, _socket.TCP_KEEPCNT, 3)
241
+ except Exception as e:
242
+ # keepalive 调优失败不阻断连接创建(回退内核默认)
243
+ SYLogger.warning(f"TCP keepalive 调优失败(回退默认): {e}")
244
+
211
245
  # 注册 SQL 日志拦截器
212
246
  from sycommon.logging.async_sql_logger import AsyncSQLTraceLogger
213
247
  AsyncSQLTraceLogger.setup_sql_logging(self.engine)
@@ -178,6 +178,9 @@ class HeartbeatProcessWorker:
178
178
  username=self.nacos_config.username,
179
179
  password=self.nacos_config.password
180
180
  )
181
+ # SDK 默认单请求超时仅 3 秒,网络/DNS 抖动即抛
182
+ # "All server are not available",放宽到 10 秒
183
+ self.nacos_client.set_options(default_timeout=10)
181
184
  logger.info("Nacos 客户端初始化成功")
182
185
  return True
183
186
  except Exception as e:
@@ -68,7 +68,7 @@ def setup_trace_id_handler(app):
68
68
  token = SYLogger.set_trace_id(trace_id)
69
69
  # 🔒 白名单过滤:Authorization/Cookie/SYT_TOKEN 等凭证 header 不进
70
70
  # 日志上下文,防止下游任何日志路径把凭证打到日志。
71
- header_token = SYLogger.set_headers(_filtered_headers(request.headers.raw))
71
+ header_token = SYLogger.set_headers(request.headers.raw)
72
72
 
73
73
  # 获取请求参数
74
74
  query_params = dict(request.query_params)
@@ -1,4 +1,6 @@
1
1
  from typing import TypeVar, Any, Generic
2
+ import warnings
3
+
2
4
  from pydantic import BaseModel, Field
3
5
  from fastapi.responses import JSONResponse
4
6
  from fastapi import status
@@ -8,7 +10,11 @@ T = TypeVar('T')
8
10
 
9
11
 
10
12
  class BaseResponseModel(BaseModel, Generic[T]):
11
- """基础响应模型,支持自定义状态码"""
13
+ """基础响应模型,支持自定义状态码
14
+
15
+ 注意:code 默认 0 是旧版 0/1 业务码的兼容默认值,新代码请走
16
+ ok()/fail()(code=200/500)。默认值暂不改,避免破坏旧接口反序列化。
17
+ """
12
18
  code: int = Field(default=0, description="业务响应码,默认0成功,1失败,支持自定义")
13
19
  message: str | None = Field(default=None, description="业务响应信息")
14
20
  success: bool = Field(default=True, description="请求是否成功")
@@ -20,6 +26,23 @@ class BaseResponseModel(BaseModel, Generic[T]):
20
26
  from_attributes = True
21
27
 
22
28
 
29
+ # =====================================================================
30
+ # 【Deprecated】旧版 0/1 业务码方式 —— 未来将移除,请勿在新代码中使用。
31
+ #
32
+ # 新代码请用下方的 ok() / fail()(HTTP 语义:成功 code=200 / 失败 code=500,
33
+ # HTTP status 与业务码一致,success 由 2xx 推导)。
34
+ # =====================================================================
35
+
36
+
37
+ def _deprecate_01_style(name: str) -> None:
38
+ warnings.warn(
39
+ f"sycommon.models.base_http.{name} 已废弃(0/1 业务码方式),"
40
+ f"请改用 ok()/fail()(HTTP 语义 code=200/500);未来版本将移除。",
41
+ DeprecationWarning,
42
+ stacklevel=3,
43
+ )
44
+
45
+
23
46
  def build_response_content(
24
47
  data: T | Any = None,
25
48
  code: int = 0,
@@ -59,7 +82,8 @@ def create_response(
59
82
  message: str = None,
60
83
  status_code: int = status.HTTP_200_OK
61
84
  ) -> JSONResponse:
62
- """创建完整响应,支持自定义业务状态码"""
85
+ """【Deprecated】创建完整响应,支持自定义业务状态码 —— 改用 http_response()"""
86
+ _deprecate_01_style("create_response")
63
87
  content = build_response_content(data=data, code=code, message=message)
64
88
  return JSONResponse(
65
89
  content=content,
@@ -68,7 +92,8 @@ def create_response(
68
92
 
69
93
 
70
94
  def success_response(data: T | Any = None, code: int = 0, message: str = None) -> JSONResponse:
71
- """快捷创建成功响应(code=0, success=True"""
95
+ """【Deprecated】快捷创建成功响应(code=0, success=True) —— 改用 ok()"""
96
+ _deprecate_01_style("success_response")
72
97
  return create_response(data=data, code=code, message=message)
73
98
 
74
99
 
@@ -78,7 +103,8 @@ def error_response(
78
103
  data: T | Any = None,
79
104
  status_code: int = status.HTTP_500_INTERNAL_SERVER_ERROR
80
105
  ) -> JSONResponse:
81
- """快捷创建错误响应,支持自定义错误码(如200)"""
106
+ """【Deprecated】快捷创建错误响应(code=1) —— 改用 fail()"""
107
+ _deprecate_01_style("error_response")
82
108
  return create_response(
83
109
  data=data,
84
110
  code=code,
@@ -88,7 +114,8 @@ def error_response(
88
114
 
89
115
 
90
116
  def success_content(data: T | Any = None) -> dict:
91
- """构建成功响应内容字典"""
117
+ """【Deprecated】构建成功响应内容字典(code=0) —— 改用 ok()"""
118
+ _deprecate_01_style("success_content")
92
119
  return build_response_content(data=data)
93
120
 
94
121
 
@@ -97,7 +124,8 @@ def error_content(
97
124
  code: int = 1,
98
125
  data: T | Any = None
99
126
  ) -> dict:
100
- """构建错误响应内容字典,支持自定义错误码"""
127
+ """【Deprecated】构建错误响应内容字典(code=1) —— 改用 fail()"""
128
+ _deprecate_01_style("error_content")
101
129
  return build_response_content(data=data, code=code, message=message)
102
130
 
103
131
 
@@ -107,7 +135,7 @@ def error_content(
107
135
  # 与上面 0/1 业务码的区别:code 直接用 HTTP 状态码语义——
108
136
  # 成功 code=200 / 失败 code=500,HTTP status 同步对应(200 / 500),
109
137
  # success 由 code 是否为 2xx 推导。不再用 0/1 代表成功失败。
110
- # 旧函数保留兼容,新项目请用 ok() / fail()
138
+ # 旧函数已标记 Deprecated(调用即抛 DeprecationWarning),未来版本移除。
111
139
  # =====================================================================
112
140
 
113
141
 
@@ -55,6 +55,9 @@ async def send_wechat_markdown_msg(
55
55
  ) -> Optional[dict]:
56
56
  """
57
57
  异步发送企业微信Markdown格式的WebHook消息
58
+
59
+ 失败(网络异常/非0 errcode)时等 2 秒重试一次,
60
+ 避免网络瞬时抖动导致告警丢失(例如只收到"恢复"没收到"断开")。
58
61
  """
59
62
  # 构造请求体(Markdown格式)
60
63
  payload = {
@@ -64,26 +67,34 @@ async def send_wechat_markdown_msg(
64
67
  }
65
68
  }
66
69
 
67
- try:
68
- # 使用 json 参数自动处理序列化和 Content-Type
69
- async with aiohttp.ClientSession() as session:
70
- async with session.post(
71
- url=webhook,
72
- json=payload,
73
- timeout=aiohttp.ClientTimeout(total=10)
74
- ) as response:
75
- response_data = await response.json()
76
-
77
- if response.status == 200 and response_data.get("errcode") == 0:
78
- SYLogger.info(f"消息发送成功: {response_data}")
79
- return response_data
80
- else:
81
- SYLogger.warning(
82
- f"消息发送失败 - 状态码: {response.status}, 响应: {response_data}")
83
- return None
84
- except Exception as e:
85
- SYLogger.error(f"发送企业微信消息异常: {str(e)}")
86
- return None
70
+ max_attempts = 2
71
+ for attempt in range(1, max_attempts + 1):
72
+ try:
73
+ # 使用 json 参数自动处理序列化和 Content-Type
74
+ async with aiohttp.ClientSession() as session:
75
+ async with session.post(
76
+ url=webhook,
77
+ json=payload,
78
+ timeout=aiohttp.ClientTimeout(total=10)
79
+ ) as response:
80
+ response_data = await response.json()
81
+
82
+ if response.status == 200 and response_data.get("errcode") == 0:
83
+ SYLogger.info(f"消息发送成功: {response_data}")
84
+ return response_data
85
+ else:
86
+ SYLogger.warning(
87
+ f"消息发送失败 - 状态码: {response.status}, 响应: {response_data}")
88
+ if attempt < max_attempts:
89
+ await asyncio.sleep(2)
90
+ continue
91
+ return None
92
+ except Exception as e:
93
+ SYLogger.error(f"发送企业微信消息异常: {str(e)}")
94
+ if attempt < max_attempts:
95
+ await asyncio.sleep(2)
96
+ continue
97
+ return None
87
98
 
88
99
 
89
100
  async def send_webhook(error_info: dict = None, webhook: str = None):
@@ -88,6 +88,9 @@ class NacosClientBase:
88
88
  server_addresses=register_ip,
89
89
  namespace=namespace_id
90
90
  )
91
+ # SDK 默认单请求超时仅 3 秒,网络/DNS 抖动即抛
92
+ # "All server are not available",放宽到 10 秒
93
+ self.nacos_client.set_options(default_timeout=10)
91
94
  SYLogger.info("nacos:客户端初始化成功")
92
95
  self._client_initialized = True
93
96
  return True
@@ -120,6 +123,9 @@ class NacosClientBase:
120
123
  server_addresses=register_ip,
121
124
  namespace=namespace_id
122
125
  )
126
+ # SDK 默认单请求超时仅 3 秒,网络/DNS 抖动即抛
127
+ # "All server are not available",放宽到 10 秒
128
+ self.nacos_client.set_options(default_timeout=10)
123
129
 
124
130
  if self._verify_client_connection():
125
131
  self._client_initialized = True