sycommon-python-lib 0.2.10a3__tar.gz → 0.2.10a5__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.10a3 → sycommon_python_lib-0.2.10a5}/PKG-INFO +13 -13
  2. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/pyproject.toml +13 -13
  3. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycommon/agent/sandbox/minio_sync.py +58 -28
  4. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycommon/database/async_database_service.py +5 -1
  5. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycommon/database/database_service.py +44 -2
  6. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycommon/database/redis_service.py +18 -0
  7. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycommon/database/token_usage_db_service.py +36 -2
  8. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycommon/heartbeat_process/heartbeat_process_worker.py +3 -0
  9. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycommon/middleware/traceid.py +1 -1
  10. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycommon/models/base_http.py +35 -7
  11. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycommon/notice/uvicorn_monitor.py +31 -20
  12. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycommon/synacos/nacos_client_base.py +6 -0
  13. sycommon_python_lib-0.2.10a5/src/sycommon/tests/test_db_keepalive.py +178 -0
  14. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycommon/tests/test_upgrade_verification.py +7 -7
  15. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycommon_python_lib.egg-info/PKG-INFO +13 -13
  16. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycommon_python_lib.egg-info/SOURCES.txt +1 -0
  17. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycommon_python_lib.egg-info/requires.txt +12 -12
  18. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/README.md +0 -0
  19. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/setup.cfg +0 -0
  20. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/command/__init__.py +0 -0
  21. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/command/cli.py +0 -0
  22. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/command/core/__init__.py +0 -0
  23. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/command/core/console.py +0 -0
  24. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/command/core/models.py +0 -0
  25. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/command/core/project.py +0 -0
  26. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/command/core/utils.py +0 -0
  27. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/command/templates/__init__.py +0 -0
  28. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/command/templates/agent/README.md.tpl +0 -0
  29. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/command/templates/agent/__init__.py +0 -0
  30. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/command/templates/agent/agent/__init__.py.tpl +0 -0
  31. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/command/templates/agent/agent/main_agent.py.tpl +0 -0
  32. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/command/templates/agent/agent/nodes/__init__.py.tpl +0 -0
  33. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/command/templates/agent/agent/nodes/example_node.py.tpl +0 -0
  34. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/command/templates/agent/agent/states/__init__.py.tpl +0 -0
  35. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/command/templates/agent/agent/states/agent_state.py.tpl +0 -0
  36. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/command/templates/agent/api/__init__.py.tpl +0 -0
  37. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/command/templates/agent/api/query.py.tpl +0 -0
  38. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/command/templates/agent/api/sse/__init__.py.tpl +0 -0
  39. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/command/templates/agent/api/sse/agent.py.tpl +0 -0
  40. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/command/templates/agent/app.py.tpl +0 -0
  41. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/command/templates/agent/client/__init__.py.tpl +0 -0
  42. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/command/templates/agent/db/__init__.py.tpl +0 -0
  43. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/command/templates/agent/db/model/__init__.py.tpl +0 -0
  44. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/command/templates/agent/db/model/entity.py.tpl +0 -0
  45. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/command/templates/agent/db/service.py.tpl +0 -0
  46. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/command/templates/agent/model/__init__.py.tpl +0 -0
  47. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/command/templates/agent/model/parse.py.tpl +0 -0
  48. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/command/templates/agent/tools/__init__.py.tpl +0 -0
  49. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/command/templates/agent/tools/mq.py.tpl +0 -0
  50. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/command/templates/base/.env.tpl +0 -0
  51. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/command/templates/base/.gitignore.tpl +0 -0
  52. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/command/templates/base/Dockerfile.tpl +0 -0
  53. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/command/templates/base/README.md.tpl +0 -0
  54. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/command/templates/base/__init__.py +0 -0
  55. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/command/templates/base/app.py.tpl +0 -0
  56. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/command/templates/base/app.yaml.tpl +0 -0
  57. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/command/templates/base/client/FileServiceClient.py.tpl +0 -0
  58. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/command/templates/base/client/__init__.py.tpl +0 -0
  59. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/command/templates/base/model/__init__.py.tpl +0 -0
  60. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/command/templates/base/model/file_info.py.tpl +0 -0
  61. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/command/templates/base/requirements.txt.tpl +0 -0
  62. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/command/templates/cli/README.md.tpl +0 -0
  63. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/command/templates/cli/__init__.py +0 -0
  64. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/command/templates/cli/app.py.tpl +0 -0
  65. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/command/templates/cli/commands/__init__.py.tpl +0 -0
  66. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/command/templates/cli/commands/hello.py.tpl +0 -0
  67. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/command/templates/cli/pyproject.toml.tpl +0 -0
  68. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/command/templates/cli/tools/__init__.py.tpl +0 -0
  69. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/command/templates/web/README.md.tpl +0 -0
  70. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/command/templates/web/__init__.py +0 -0
  71. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/command/templates/web/api/__init__.py.tpl +0 -0
  72. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/command/templates/web/api/echo.py.tpl +0 -0
  73. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/command/templates/web/api/sse/__init__.py.tpl +0 -0
  74. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/command/templates/web/api/sse/echo.py.tpl +0 -0
  75. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/command/templates/web/app.py.tpl +0 -0
  76. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/command/templates/web/client/__init__.py.tpl +0 -0
  77. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/command/templates/web/model/__init__.py.tpl +0 -0
  78. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/command/templates/web/tools/__init__.py.tpl +0 -0
  79. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/command/templates/web/tools/mq.py.tpl +0 -0
  80. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/nexus/__init__.py +0 -0
  81. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycli/__init__.py +0 -0
  82. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycli/__main__.py +0 -0
  83. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycli/acp/__init__.py +0 -0
  84. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycli/acp/config.py +0 -0
  85. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycli/acp/executor.py +0 -0
  86. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycli/acp/registry.py +0 -0
  87. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycli/acp/server.py +0 -0
  88. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycli/agents/__init__.py +0 -0
  89. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycli/agents/factory.py +0 -0
  90. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycli/agents/prompts.py +0 -0
  91. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycli/cdp/__init__.py +0 -0
  92. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycli/cdp/browser.py +0 -0
  93. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycli/cdp/capabilities/__init__.py +0 -0
  94. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycli/cdp/capabilities/console.py +0 -0
  95. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycli/cdp/capabilities/dom.py +0 -0
  96. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycli/cdp/capabilities/network.py +0 -0
  97. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycli/cdp/capabilities/page_errors.py +0 -0
  98. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycli/cdp/capabilities/performance.py +0 -0
  99. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycli/cdp/capabilities/screenshot.py +0 -0
  100. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycli/cdp/client.py +0 -0
  101. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycli/cdp/protocol.py +0 -0
  102. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycli/cdp/repl.py +0 -0
  103. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycli/cli.py +0 -0
  104. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycli/commands/__init__.py +0 -0
  105. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycli/commands/acp_cmd.py +0 -0
  106. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycli/commands/acp_serve_cmd.py +0 -0
  107. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycli/commands/cdp_cmd.py +0 -0
  108. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycli/commands/chat_cmd.py +0 -0
  109. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycli/commands/create_cmd.py +0 -0
  110. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycli/commands/evaluate_cmd.py +0 -0
  111. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycli/commands/init_cmd.py +0 -0
  112. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycli/commands/memory_cmd.py +0 -0
  113. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycli/commands/resume_cmd.py +0 -0
  114. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycli/commands/rollback_cmd.py +0 -0
  115. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycli/commands/run_cmd.py +0 -0
  116. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycli/core/__init__.py +0 -0
  117. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycli/core/backend.py +0 -0
  118. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycli/core/config.py +0 -0
  119. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycli/core/display.py +0 -0
  120. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycli/core/git_integration.py +0 -0
  121. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycli/core/llm.py +0 -0
  122. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycli/core/state.py +0 -0
  123. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycli/evaluate/__init__.py +0 -0
  124. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycli/evaluate/api_evaluator.py +0 -0
  125. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycli/memory/__init__.py +0 -0
  126. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycli/memory/compressor.py +0 -0
  127. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycli/memory/full.py +0 -0
  128. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycli/memory/hot.py +0 -0
  129. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycli/memory/manager.py +0 -0
  130. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycli/memory/warm.py +0 -0
  131. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycli/mode/__init__.py +0 -0
  132. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycli/mode/create.py +0 -0
  133. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycli/mode/optimize.py +0 -0
  134. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycli/models/__init__.py +0 -0
  135. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycli/models/config_models.py +0 -0
  136. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycli/rl/__init__.py +0 -0
  137. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycli/rl/baseline_tests.py +0 -0
  138. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycli/rl/checkpoint.py +0 -0
  139. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycli/rl/convergence.py +0 -0
  140. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycli/rl/diagnosis.py +0 -0
  141. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycli/rl/engine.py +0 -0
  142. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycli/rl/environment.py +0 -0
  143. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycli/rl/experience.py +0 -0
  144. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycli/rl/harness_prompts.py +0 -0
  145. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycli/rl/history.py +0 -0
  146. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycli/rl/optimization_logger.py +0 -0
  147. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycli/rl/pre_validation.py +0 -0
  148. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycli/rl/reward.py +0 -0
  149. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycli/rl/strategy_bandit.py +0 -0
  150. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycli/rl/strategy_generator.py +0 -0
  151. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycli/rl/strategy_prompts.py +0 -0
  152. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycli/simple_chat_agent.py +0 -0
  153. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycli/skills/__init__.py +0 -0
  154. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycommon/__init__.py +0 -0
  155. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycommon/agent/__init__.py +0 -0
  156. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycommon/agent/acp/__init__.py +0 -0
  157. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycommon/agent/acp/client.py +0 -0
  158. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycommon/agent/acp/fetch.py +0 -0
  159. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycommon/agent/acp/server_adapter.py +0 -0
  160. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycommon/agent/acp/ssh_init.py +0 -0
  161. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycommon/agent/acp/tool.py +0 -0
  162. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycommon/agent/agent_manager.py +0 -0
  163. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycommon/agent/chat_events.py +0 -0
  164. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycommon/agent/deep_agent.py +0 -0
  165. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycommon/agent/mcp/__init__.py +0 -0
  166. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycommon/agent/mcp/models.py +0 -0
  167. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycommon/agent/mcp/tool_loader.py +0 -0
  168. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycommon/agent/middleware/model_request_prep.py +0 -0
  169. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycommon/agent/middleware/sandbox_path_guard.py +0 -0
  170. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycommon/agent/middleware/sensitive_guard.py +0 -0
  171. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycommon/agent/middleware/skill_write_guard.py +0 -0
  172. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycommon/agent/multi_agent_team.py +0 -0
  173. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycommon/agent/reasoning_content_patch.py +0 -0
  174. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycommon/agent/resume_compactor.py +0 -0
  175. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycommon/agent/sandbox/__init__.py +0 -0
  176. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycommon/agent/sandbox/consistent_hash.py +0 -0
  177. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycommon/agent/sandbox/file_ops.py +0 -0
  178. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycommon/agent/sandbox/http_sandbox_backend.py +0 -0
  179. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycommon/agent/sandbox/sandbox_pool.py +0 -0
  180. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycommon/agent/sandbox/sandbox_recovery.py +0 -0
  181. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycommon/agent/sandbox/session.py +0 -0
  182. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycommon/agent/skills_retry_patch.py +0 -0
  183. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycommon/agent/summarization_utils.py +0 -0
  184. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycommon/auth/__init__.py +0 -0
  185. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycommon/auth/ldap_service.py +0 -0
  186. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycommon/auth/oa_cache.py +0 -0
  187. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycommon/auth/oa_crypto.py +0 -0
  188. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycommon/auth/oa_service.py +0 -0
  189. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycommon/auth/wecom_ldap_service.py +0 -0
  190. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycommon/config/ACPAgentConfig.py +0 -0
  191. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycommon/config/Config.py +0 -0
  192. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycommon/config/DatabaseConfig.py +0 -0
  193. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycommon/config/EgressPolicyConfig.py +0 -0
  194. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycommon/config/ElasticsearchConfig.py +0 -0
  195. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycommon/config/EmbeddingConfig.py +0 -0
  196. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycommon/config/LLMConfig.py +0 -0
  197. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycommon/config/LangfuseConfig.py +0 -0
  198. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycommon/config/MQConfig.py +0 -0
  199. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycommon/config/PgConfig.py +0 -0
  200. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycommon/config/RedisConfig.py +0 -0
  201. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycommon/config/RerankerConfig.py +0 -0
  202. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycommon/config/SentryConfig.py +0 -0
  203. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycommon/config/XxlJobConfig.py +0 -0
  204. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycommon/config/__init__.py +0 -0
  205. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycommon/config/config_change_notifier.py +0 -0
  206. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycommon/database/async_base_db_service.py +0 -0
  207. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycommon/database/base_db_service.py +0 -0
  208. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycommon/database/elasticsearch_service.py +0 -0
  209. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycommon/database/pg_checkpoint_service.py +0 -0
  210. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycommon/database/resilient_pg_saver.py +0 -0
  211. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycommon/health/__init__.py +0 -0
  212. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycommon/health/health_check.py +0 -0
  213. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycommon/health/metrics.py +0 -0
  214. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycommon/health/ping.py +0 -0
  215. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycommon/heartbeat_process/__init__.py +0 -0
  216. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycommon/heartbeat_process/heartbeat_config.py +0 -0
  217. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycommon/heartbeat_process/heartbeat_process_manager.py +0 -0
  218. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycommon/llm/__init__.py +0 -0
  219. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycommon/llm/embedding.py +0 -0
  220. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycommon/llm/get_llm.py +0 -0
  221. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycommon/llm/llm_logger.py +0 -0
  222. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycommon/llm/llm_tokens.py +0 -0
  223. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycommon/llm/llm_with_token_tracking.py +0 -0
  224. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycommon/llm/native_with_fallback_runnable.py +0 -0
  225. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycommon/llm/output_fixing_runnable.py +0 -0
  226. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycommon/llm/struct_token.py +0 -0
  227. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycommon/llm/sy_langfuse.py +0 -0
  228. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycommon/llm/tiktoken_cache/9b5ad71b2ce5302211f9c61530b329a4922fc6a4 +0 -0
  229. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycommon/llm/tiktoken_cache/fb374d419588a4632f3f557e76b4b70aebbca790 +0 -0
  230. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycommon/llm/token_usage_es_service.py +0 -0
  231. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycommon/llm/token_usage_mysql_service.py +0 -0
  232. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycommon/llm/token_utils.py +0 -0
  233. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycommon/llm/usage_token.py +0 -0
  234. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycommon/logging/__init__.py +0 -0
  235. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycommon/logging/async_sql_logger.py +0 -0
  236. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycommon/logging/kafka_log.py +0 -0
  237. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycommon/logging/log_masker.py +0 -0
  238. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycommon/logging/logger_levels.py +0 -0
  239. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycommon/logging/logger_wrapper.py +0 -0
  240. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycommon/logging/process_logger.py +0 -0
  241. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycommon/logging/sql_logger.py +0 -0
  242. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycommon/mcp_server/__init__.py +0 -0
  243. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycommon/mcp_server/server.py +0 -0
  244. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycommon/middleware/__init__.py +0 -0
  245. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycommon/middleware/context.py +0 -0
  246. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycommon/middleware/cors.py +0 -0
  247. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycommon/middleware/docs.py +0 -0
  248. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycommon/middleware/egress_wall.py +0 -0
  249. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycommon/middleware/exception.py +0 -0
  250. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycommon/middleware/middleware.py +0 -0
  251. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycommon/middleware/monitor_memory.py +0 -0
  252. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycommon/middleware/mq.py +0 -0
  253. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycommon/middleware/sandbox.py +0 -0
  254. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycommon/middleware/sandbox_gateway.py +0 -0
  255. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycommon/middleware/timeout.py +0 -0
  256. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycommon/middleware/token_tracking.py +0 -0
  257. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycommon/middleware/tool_result_truncation.py +0 -0
  258. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycommon/models/__init__.py +0 -0
  259. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycommon/models/log.py +0 -0
  260. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycommon/models/mcp_server_config.py +0 -0
  261. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycommon/models/mqlistener_config.py +0 -0
  262. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycommon/models/mqmsg_model.py +0 -0
  263. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycommon/models/mqsend_config.py +0 -0
  264. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycommon/models/sandbox.py +0 -0
  265. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycommon/models/sso_user.py +0 -0
  266. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycommon/models/token_usage.py +0 -0
  267. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycommon/models/token_usage_mysql.py +0 -0
  268. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycommon/models/xxljob_handler_config.py +0 -0
  269. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycommon/notice/__init__.py +0 -0
  270. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycommon/notice/wecom_message.py +0 -0
  271. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycommon/rabbitmq/process_pool_consumer.py +0 -0
  272. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycommon/rabbitmq/rabbit_management_client.py +0 -0
  273. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycommon/rabbitmq/rabbitmq_client.py +0 -0
  274. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycommon/rabbitmq/rabbitmq_pool.py +0 -0
  275. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycommon/rabbitmq/rabbitmq_service.py +0 -0
  276. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycommon/rabbitmq/rabbitmq_service_client_manager.py +0 -0
  277. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycommon/rabbitmq/rabbitmq_service_connection_monitor.py +0 -0
  278. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycommon/rabbitmq/rabbitmq_service_consumer_manager.py +0 -0
  279. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycommon/rabbitmq/rabbitmq_service_core.py +0 -0
  280. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycommon/rabbitmq/rabbitmq_service_producer_manager.py +0 -0
  281. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycommon/sentry/__init__.py +0 -0
  282. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycommon/sentry/sy_sentry.py +0 -0
  283. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycommon/services.py +0 -0
  284. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycommon/sse/__init__.py +0 -0
  285. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycommon/sse/event.py +0 -0
  286. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycommon/sse/sse.py +0 -0
  287. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycommon/synacos/__init__.py +0 -0
  288. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycommon/synacos/example.py +0 -0
  289. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycommon/synacos/example2.py +0 -0
  290. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycommon/synacos/feign.py +0 -0
  291. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycommon/synacos/feign_client.py +0 -0
  292. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycommon/synacos/nacos_config_manager.py +0 -0
  293. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycommon/synacos/nacos_heartbeat_manager.py +0 -0
  294. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycommon/synacos/nacos_service.py +0 -0
  295. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycommon/synacos/nacos_service_discovery.py +0 -0
  296. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycommon/synacos/nacos_service_registration.py +0 -0
  297. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycommon/synacos/param.py +0 -0
  298. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycommon/tests/deep_agent_server.py +0 -0
  299. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycommon/tests/test_backend_factory_compat.py +0 -0
  300. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycommon/tests/test_consistent_hash.py +0 -0
  301. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycommon/tests/test_consume_dedup.py +0 -0
  302. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycommon/tests/test_consumer_broker_health.py +0 -0
  303. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycommon/tests/test_consumer_loss_rootcause.py +0 -0
  304. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycommon/tests/test_consumer_recovery.py +0 -0
  305. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycommon/tests/test_consumer_recovery_fix.py +0 -0
  306. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycommon/tests/test_consumer_tags_sync.py +0 -0
  307. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycommon/tests/test_deep_agent.py +0 -0
  308. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycommon/tests/test_dynamic_max_tokens.py +0 -0
  309. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycommon/tests/test_email.py +0 -0
  310. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycommon/tests/test_encoding_cache.py +0 -0
  311. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycommon/tests/test_env_tenant_helper.py +0 -0
  312. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycommon/tests/test_exp_concurrent_migrate.py +0 -0
  313. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycommon/tests/test_exp_delete_queue_with_consumers.py +0 -0
  314. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycommon/tests/test_fault_injection_real.py +0 -0
  315. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycommon/tests/test_fix_verification.py +0 -0
  316. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycommon/tests/test_heartbeat_timeout.py +0 -0
  317. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycommon/tests/test_integration_real_broker.py +0 -0
  318. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycommon/tests/test_mcp_server.py +0 -0
  319. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycommon/tests/test_minimax_reasoning.py +0 -0
  320. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycommon/tests/test_mq.py +0 -0
  321. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycommon/tests/test_mq_config_driven.py +0 -0
  322. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycommon/tests/test_nacos_llm_real.py +0 -0
  323. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycommon/tests/test_oa_login.py +0 -0
  324. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycommon/tests/test_queue_priority_fallback.py +0 -0
  325. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycommon/tests/test_queue_priority_upgrade_timing.py +0 -0
  326. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycommon/tests/test_real_summarization.py +0 -0
  327. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycommon/tests/test_reconnect_scenarios.py +0 -0
  328. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycommon/tests/test_sandbox_glob_hardening.py +0 -0
  329. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycommon/tests/test_summarization_config.py +0 -0
  330. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycommon/tests/test_summarization_real.py +0 -0
  331. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycommon/tests/test_summary_leak_e2e.py +0 -0
  332. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycommon/tests/test_upgrade_aio_pika.py +0 -0
  333. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycommon/tests/test_upgrade_langgraph_stream.py +0 -0
  334. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycommon/tools/__init__.py +0 -0
  335. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycommon/tools/async_utils.py +0 -0
  336. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycommon/tools/docs.py +0 -0
  337. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycommon/tools/env.py +0 -0
  338. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycommon/tools/merge_headers.py +0 -0
  339. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycommon/tools/snowflake.py +0 -0
  340. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycommon/tools/syemail.py +0 -0
  341. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycommon/tools/time_utils.py +0 -0
  342. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycommon/tools/timing.py +0 -0
  343. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycommon/tools/user_id.py +0 -0
  344. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycommon/xxljob/__init__.py +0 -0
  345. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycommon/xxljob/xxljob_service.py +0 -0
  346. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycommon_python_lib.egg-info/dependency_links.txt +0 -0
  347. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycommon_python_lib.egg-info/entry_points.txt +0 -0
  348. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/src/sycommon_python_lib.egg-info/top_level.txt +0 -0
  349. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/tests/test_acp_tool.py +0 -0
  350. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/tests/test_asyncio_logging.py +0 -0
  351. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/tests/test_config_change_notifier.py +0 -0
  352. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/tests/test_hotreload_snapshot.py +0 -0
  353. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/tests/test_llm_apikey_contextvar.py +0 -0
  354. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/tests/test_log_masker.py +0 -0
  355. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/tests/test_resilient_pg_saver.py +0 -0
  356. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/tests/test_sandbox_path_guard.py +0 -0
  357. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/tests/test_sensitive_guard.py +0 -0
  358. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/tests/test_simple_chat_agent.py +0 -0
  359. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/tests/test_skill_regex_upgrade.py +0 -0
  360. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/tests/test_skill_write_guard.py +0 -0
  361. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/tests/test_streaming_e2e.py +0 -0
  362. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/tests/test_sycli.py +0 -0
  363. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/tests/test_sylogger_fixes.py +0 -0
  364. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/tests/test_sync_skills_to_sandbox.py +0 -0
  365. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/tests/test_time_utils.py +0 -0
  366. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/tests/test_traceid_omit_base64.py +0 -0
  367. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/tests/test_upload_concurrency.py +0 -0
  368. {sycommon_python_lib-0.2.10a3 → sycommon_python_lib-0.2.10a5}/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.10a3
3
+ Version: 0.2.10a5
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.10a3"
3
+ version = "0.2.10a5"
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",
@@ -886,6 +886,25 @@ class MinioSyncService(metaclass=SingletonMeta):
886
886
 
887
887
  # ============== 反向同步(MinIO → 沙箱) ==============
888
888
 
889
+ def _download_object_to_file(self, key: str, dest: str) -> int:
890
+ """流式下载 MinIO 对象到本地文件(同步,跑在 to_thread),返回字节数。
891
+
892
+ 替代旧 resp.read() 整文件进内存:大附件场景一批 5 路并发 × 全量驻留
893
+ = 数百 MB~GB 级 RSS 峰值(打爆内存的根因)。流式写盘后内存峰值 ≈ 单块,
894
+ 与文件大小无关;与 _sync_one 的 adownload_to_file 落盘模式对称。
895
+ """
896
+ resp = self._client.get_object(self._bucket, key)
897
+ try:
898
+ total = 0
899
+ with open(dest, "wb") as f:
900
+ for chunk in resp.stream(5 * 1024 * 1024):
901
+ f.write(chunk)
902
+ total += len(chunk)
903
+ return total
904
+ finally:
905
+ resp.close()
906
+ resp.release_conn()
907
+
889
908
  async def restore_from_minio(self, sandbox_backend, user_id: str) -> int:
890
909
  """将 MinIO 中的文件恢复到沙箱
891
910
 
@@ -953,9 +972,14 @@ class MinioSyncService(metaclass=SingletonMeta):
953
972
  # 打满线程池、挤占主请求路径的沙箱操作。
954
973
  # 下载协程先抢本用户 5 槽、再抢全局 100 槽,故实际并发 = min(本用户待下载, 全局剩余)。
955
974
  #
956
- # 🔑 OOM 兜底:旧实现 gather 所有文件内容进 downloaded 列表后才上传,用户文件多/大
957
- # 一次几 GB 进内存。改为【分批流水线】:下 _RESTORE_PER_USER 个→立即上传→字节出作用域
958
- # →下一批。同时按 list_objects size 累加 total_bytes_seen,超 _MAX_RESTORE_BYTES 跳过剩余。
975
+ # 🔑 OOM 治理(两处放大器都已拔掉):
976
+ # - 上传侧旧实现 gather 所有文件内容进 downloaded 列表后才 base64 整包传沙箱,
977
+ # 用户文件多/大时一次几 GB 进内存 改【分批流水线】+ 每批立即上传;
978
+ # - 下载侧旧实现 resp.read() 把整文件读进内存,单个大附件即百 MB 级驻留
979
+ # → 改【流式落盘】:MinIO 5MB 块写临时文件 → aupload_stream_from_disk
980
+ # 逐块读盘推沙箱 → 删临时文件,内存峰值 ≈ 单块,与文件大小无关。
981
+ # 另按 list_objects 的 size 累加 total_bytes_seen,超 _MAX_RESTORE_BYTES 跳过剩余
982
+ # (仅 warning,会话末尾全量扫描兜底)。
959
983
  restored = 0
960
984
  global_sem = _get_restore_download_sem()
961
985
  per_user_sem = asyncio.Semaphore(_RESTORE_PER_USER)
@@ -964,26 +988,43 @@ class MinioSyncService(metaclass=SingletonMeta):
964
988
  obj_size_map = {o.object_name[len(prefix):]: (o.size or 0) for o in objects}
965
989
 
966
990
  async def _download_one(rel_path: str):
967
- """下载单个 MinIO 对象到内存,返回 (沙箱绝对路径, 内容) None。"""
991
+ """下载单个 MinIO 对象【流式落盘】再流式上传沙箱,成功 True 失败 None。
992
+
993
+ 全程不把整文件 bytes 攒进内存:MinIO 5MB 块写临时文件 →
994
+ aupload_stream_from_disk 逐块读盘推沙箱 → 删临时文件。
995
+ """
996
+ tmp_path = None
968
997
  async with per_user_sem, global_sem:
969
998
  try:
970
- def _download_object(bucket, key):
971
- resp = self._client.get_object(bucket, key)
972
- try:
973
- return resp.read()
974
- finally:
975
- resp.close()
976
- resp.release_conn()
977
-
978
- content = await asyncio.to_thread(
979
- _download_object, self._bucket, f"{prefix}{rel_path}"
999
+ import tempfile as _tf
1000
+ with _tf.NamedTemporaryFile(delete=False) as tmp:
1001
+ tmp_path = tmp.name
1002
+ fsize = await asyncio.to_thread(
1003
+ self._download_object_to_file,
1004
+ f"{prefix}{rel_path}", tmp_path
1005
+ )
1006
+ if fsize == 0:
1007
+ SYLogger.warning(f"[MinIO] 下载文件为空/失败: {rel_path}")
1008
+ return None
1009
+ r = await sandbox_backend.aupload_stream_from_disk(
1010
+ f"/{rel_path}", tmp_path
980
1011
  )
981
- return (f"/{rel_path}", content)
1012
+ if getattr(r, "error", None):
1013
+ SYLogger.warning(
1014
+ f"[MinIO] 上传到沙箱失败: {rel_path}, error={r.error}")
1015
+ return None
1016
+ return rel_path
982
1017
  except Exception as e:
983
1018
  SYLogger.warning(f"[MinIO] 下载文件失败: {rel_path}, error: {e}")
984
1019
  return None
1020
+ finally:
1021
+ if tmp_path:
1022
+ try:
1023
+ os.unlink(tmp_path)
1024
+ except OSError:
1025
+ pass
985
1026
 
986
- # 分批流水线:下 N 个 → 传 N 个 → 字节随 downloaded/download_results 出作用域释放
1027
+ # 分批流水线:下 N 个 → 传 N 个 → 临时文件随 _download_one finally 删除
987
1028
  total_bytes_seen = 0
988
1029
  capped = False
989
1030
  batch_size = _RESTORE_PER_USER
@@ -1010,18 +1051,7 @@ class MinioSyncService(metaclass=SingletonMeta):
1010
1051
  *[_download_one(rp) for rp in batch_paths]
1011
1052
  )
1012
1053
  downloaded = [r for r in download_results if r is not None]
1013
- if not downloaded:
1014
- continue
1015
- try:
1016
- results = await sandbox_backend.aupload_files(downloaded)
1017
- for r in results:
1018
- if not r.error:
1019
- restored += 1
1020
- else:
1021
- SYLogger.warning(
1022
- f"[MinIO] 上传到沙箱失败: {r.path}, error={r.error}")
1023
- except Exception as e:
1024
- SYLogger.warning(f"[MinIO] 批量上传到沙箱失败: {e}")
1054
+ restored += len(downloaded)
1025
1055
  # downloaded / download_results 到此出作用域,下一批前可被 GC
1026
1056
 
1027
1057
  if capped:
@@ -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