sycommon-python-lib 0.2.7a30__tar.gz → 0.2.7a32__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 (337) hide show
  1. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/PKG-INFO +7 -7
  2. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/pyproject.toml +7 -7
  3. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycommon/agent/deep_agent.py +7 -6
  4. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycommon/agent/mcp/tool_loader.py +5 -9
  5. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycommon/agent/middleware/sensitive_guard.py +13 -0
  6. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycommon/agent/sandbox/minio_sync.py +30 -12
  7. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycommon/agent/summarization_utils.py +9 -4
  8. sycommon_python_lib-0.2.7a32/src/sycommon/tests/test_upgrade_aio_pika.py +153 -0
  9. sycommon_python_lib-0.2.7a32/src/sycommon/tests/test_upgrade_langgraph_stream.py +131 -0
  10. sycommon_python_lib-0.2.7a32/src/sycommon/tests/test_upgrade_verification.py +229 -0
  11. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycommon_python_lib.egg-info/PKG-INFO +7 -7
  12. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycommon_python_lib.egg-info/SOURCES.txt +3 -0
  13. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycommon_python_lib.egg-info/requires.txt +6 -6
  14. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/README.md +0 -0
  15. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/setup.cfg +0 -0
  16. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/command/__init__.py +0 -0
  17. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/command/cli.py +0 -0
  18. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/command/core/__init__.py +0 -0
  19. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/command/core/console.py +0 -0
  20. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/command/core/models.py +0 -0
  21. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/command/core/project.py +0 -0
  22. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/command/core/utils.py +0 -0
  23. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/command/templates/__init__.py +0 -0
  24. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/command/templates/agent/README.md.tpl +0 -0
  25. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/command/templates/agent/__init__.py +0 -0
  26. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/command/templates/agent/agent/__init__.py.tpl +0 -0
  27. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/command/templates/agent/agent/main_agent.py.tpl +0 -0
  28. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/command/templates/agent/agent/nodes/__init__.py.tpl +0 -0
  29. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/command/templates/agent/agent/nodes/example_node.py.tpl +0 -0
  30. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/command/templates/agent/agent/states/__init__.py.tpl +0 -0
  31. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/command/templates/agent/agent/states/agent_state.py.tpl +0 -0
  32. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/command/templates/agent/api/__init__.py.tpl +0 -0
  33. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/command/templates/agent/api/query.py.tpl +0 -0
  34. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/command/templates/agent/api/sse/__init__.py.tpl +0 -0
  35. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/command/templates/agent/api/sse/agent.py.tpl +0 -0
  36. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/command/templates/agent/app.py.tpl +0 -0
  37. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/command/templates/agent/client/__init__.py.tpl +0 -0
  38. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/command/templates/agent/db/__init__.py.tpl +0 -0
  39. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/command/templates/agent/db/model/__init__.py.tpl +0 -0
  40. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/command/templates/agent/db/model/entity.py.tpl +0 -0
  41. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/command/templates/agent/db/service.py.tpl +0 -0
  42. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/command/templates/agent/model/__init__.py.tpl +0 -0
  43. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/command/templates/agent/model/parse.py.tpl +0 -0
  44. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/command/templates/agent/tools/__init__.py.tpl +0 -0
  45. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/command/templates/agent/tools/mq.py.tpl +0 -0
  46. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/command/templates/base/.env.tpl +0 -0
  47. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/command/templates/base/.gitignore.tpl +0 -0
  48. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/command/templates/base/Dockerfile.tpl +0 -0
  49. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/command/templates/base/README.md.tpl +0 -0
  50. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/command/templates/base/__init__.py +0 -0
  51. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/command/templates/base/app.py.tpl +0 -0
  52. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/command/templates/base/app.yaml.tpl +0 -0
  53. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/command/templates/base/client/FileServiceClient.py.tpl +0 -0
  54. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/command/templates/base/client/__init__.py.tpl +0 -0
  55. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/command/templates/base/model/__init__.py.tpl +0 -0
  56. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/command/templates/base/model/file_info.py.tpl +0 -0
  57. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/command/templates/base/requirements.txt.tpl +0 -0
  58. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/command/templates/cli/README.md.tpl +0 -0
  59. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/command/templates/cli/__init__.py +0 -0
  60. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/command/templates/cli/app.py.tpl +0 -0
  61. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/command/templates/cli/commands/__init__.py.tpl +0 -0
  62. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/command/templates/cli/commands/hello.py.tpl +0 -0
  63. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/command/templates/cli/pyproject.toml.tpl +0 -0
  64. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/command/templates/cli/tools/__init__.py.tpl +0 -0
  65. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/command/templates/web/README.md.tpl +0 -0
  66. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/command/templates/web/__init__.py +0 -0
  67. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/command/templates/web/api/__init__.py.tpl +0 -0
  68. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/command/templates/web/api/echo.py.tpl +0 -0
  69. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/command/templates/web/api/sse/__init__.py.tpl +0 -0
  70. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/command/templates/web/api/sse/echo.py.tpl +0 -0
  71. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/command/templates/web/app.py.tpl +0 -0
  72. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/command/templates/web/client/__init__.py.tpl +0 -0
  73. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/command/templates/web/model/__init__.py.tpl +0 -0
  74. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/command/templates/web/tools/__init__.py.tpl +0 -0
  75. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/command/templates/web/tools/mq.py.tpl +0 -0
  76. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/nexus/__init__.py +0 -0
  77. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycli/__init__.py +0 -0
  78. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycli/__main__.py +0 -0
  79. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycli/acp/__init__.py +0 -0
  80. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycli/acp/config.py +0 -0
  81. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycli/acp/executor.py +0 -0
  82. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycli/acp/registry.py +0 -0
  83. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycli/acp/server.py +0 -0
  84. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycli/agents/__init__.py +0 -0
  85. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycli/agents/factory.py +0 -0
  86. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycli/agents/prompts.py +0 -0
  87. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycli/cdp/__init__.py +0 -0
  88. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycli/cdp/browser.py +0 -0
  89. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycli/cdp/capabilities/__init__.py +0 -0
  90. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycli/cdp/capabilities/console.py +0 -0
  91. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycli/cdp/capabilities/dom.py +0 -0
  92. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycli/cdp/capabilities/network.py +0 -0
  93. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycli/cdp/capabilities/page_errors.py +0 -0
  94. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycli/cdp/capabilities/performance.py +0 -0
  95. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycli/cdp/capabilities/screenshot.py +0 -0
  96. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycli/cdp/client.py +0 -0
  97. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycli/cdp/protocol.py +0 -0
  98. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycli/cdp/repl.py +0 -0
  99. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycli/cli.py +0 -0
  100. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycli/commands/__init__.py +0 -0
  101. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycli/commands/acp_cmd.py +0 -0
  102. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycli/commands/cdp_cmd.py +0 -0
  103. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycli/commands/chat_cmd.py +0 -0
  104. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycli/commands/create_cmd.py +0 -0
  105. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycli/commands/evaluate_cmd.py +0 -0
  106. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycli/commands/init_cmd.py +0 -0
  107. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycli/commands/memory_cmd.py +0 -0
  108. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycli/commands/resume_cmd.py +0 -0
  109. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycli/commands/rollback_cmd.py +0 -0
  110. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycli/commands/run_cmd.py +0 -0
  111. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycli/core/__init__.py +0 -0
  112. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycli/core/backend.py +0 -0
  113. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycli/core/config.py +0 -0
  114. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycli/core/display.py +0 -0
  115. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycli/core/git_integration.py +0 -0
  116. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycli/core/llm.py +0 -0
  117. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycli/core/state.py +0 -0
  118. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycli/evaluate/__init__.py +0 -0
  119. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycli/evaluate/api_evaluator.py +0 -0
  120. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycli/memory/__init__.py +0 -0
  121. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycli/memory/compressor.py +0 -0
  122. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycli/memory/full.py +0 -0
  123. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycli/memory/hot.py +0 -0
  124. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycli/memory/manager.py +0 -0
  125. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycli/memory/warm.py +0 -0
  126. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycli/mode/__init__.py +0 -0
  127. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycli/mode/create.py +0 -0
  128. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycli/mode/optimize.py +0 -0
  129. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycli/models/__init__.py +0 -0
  130. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycli/models/config_models.py +0 -0
  131. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycli/rl/__init__.py +0 -0
  132. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycli/rl/baseline_tests.py +0 -0
  133. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycli/rl/checkpoint.py +0 -0
  134. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycli/rl/convergence.py +0 -0
  135. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycli/rl/diagnosis.py +0 -0
  136. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycli/rl/engine.py +0 -0
  137. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycli/rl/environment.py +0 -0
  138. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycli/rl/experience.py +0 -0
  139. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycli/rl/harness_prompts.py +0 -0
  140. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycli/rl/history.py +0 -0
  141. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycli/rl/optimization_logger.py +0 -0
  142. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycli/rl/pre_validation.py +0 -0
  143. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycli/rl/reward.py +0 -0
  144. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycli/rl/strategy_bandit.py +0 -0
  145. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycli/rl/strategy_generator.py +0 -0
  146. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycli/rl/strategy_prompts.py +0 -0
  147. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycli/simple_chat_agent.py +0 -0
  148. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycli/skills/__init__.py +0 -0
  149. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycommon/__init__.py +0 -0
  150. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycommon/agent/__init__.py +0 -0
  151. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycommon/agent/acp/__init__.py +0 -0
  152. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycommon/agent/acp/client.py +0 -0
  153. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycommon/agent/acp/fetch.py +0 -0
  154. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycommon/agent/acp/ssh_init.py +0 -0
  155. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycommon/agent/acp/tool.py +0 -0
  156. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycommon/agent/agent_manager.py +0 -0
  157. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycommon/agent/chat_events.py +0 -0
  158. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycommon/agent/mcp/__init__.py +0 -0
  159. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycommon/agent/mcp/models.py +0 -0
  160. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycommon/agent/middleware/sandbox_path_guard.py +0 -0
  161. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycommon/agent/middleware/sitecustomize.py +0 -0
  162. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycommon/agent/middleware/skill_api_whitelist.py +0 -0
  163. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycommon/agent/middleware/skill_wl_check.py +0 -0
  164. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycommon/agent/middleware/skill_write_guard.py +0 -0
  165. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycommon/agent/multi_agent_team.py +0 -0
  166. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycommon/agent/sandbox/__init__.py +0 -0
  167. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycommon/agent/sandbox/consistent_hash.py +0 -0
  168. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycommon/agent/sandbox/file_ops.py +0 -0
  169. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycommon/agent/sandbox/http_sandbox_backend.py +0 -0
  170. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycommon/agent/sandbox/sandbox_pool.py +0 -0
  171. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycommon/agent/sandbox/sandbox_recovery.py +0 -0
  172. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycommon/agent/sandbox/session.py +0 -0
  173. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycommon/auth/__init__.py +0 -0
  174. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycommon/auth/ldap_service.py +0 -0
  175. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycommon/auth/oa_cache.py +0 -0
  176. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycommon/auth/oa_crypto.py +0 -0
  177. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycommon/auth/oa_service.py +0 -0
  178. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycommon/auth/wecom_ldap_service.py +0 -0
  179. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycommon/config/ACPAgentConfig.py +0 -0
  180. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycommon/config/Config.py +0 -0
  181. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycommon/config/DatabaseConfig.py +0 -0
  182. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycommon/config/ElasticsearchConfig.py +0 -0
  183. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycommon/config/EmbeddingConfig.py +0 -0
  184. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycommon/config/LLMConfig.py +0 -0
  185. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycommon/config/LangfuseConfig.py +0 -0
  186. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycommon/config/MQConfig.py +0 -0
  187. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycommon/config/PgConfig.py +0 -0
  188. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycommon/config/RedisConfig.py +0 -0
  189. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycommon/config/RerankerConfig.py +0 -0
  190. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycommon/config/SentryConfig.py +0 -0
  191. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycommon/config/SkillApiWhitelistConfig.py +0 -0
  192. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycommon/config/XxlJobConfig.py +0 -0
  193. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycommon/config/__init__.py +0 -0
  194. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycommon/config/config_change_notifier.py +0 -0
  195. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycommon/database/async_base_db_service.py +0 -0
  196. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycommon/database/async_database_service.py +0 -0
  197. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycommon/database/base_db_service.py +0 -0
  198. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycommon/database/database_service.py +0 -0
  199. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycommon/database/elasticsearch_service.py +0 -0
  200. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycommon/database/pg_checkpoint_service.py +0 -0
  201. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycommon/database/redis_service.py +0 -0
  202. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycommon/database/resilient_pg_saver.py +0 -0
  203. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycommon/database/token_usage_db_service.py +0 -0
  204. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycommon/health/__init__.py +0 -0
  205. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycommon/health/health_check.py +0 -0
  206. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycommon/health/metrics.py +0 -0
  207. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycommon/health/ping.py +0 -0
  208. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycommon/heartbeat_process/__init__.py +0 -0
  209. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycommon/heartbeat_process/heartbeat_config.py +0 -0
  210. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycommon/heartbeat_process/heartbeat_process_manager.py +0 -0
  211. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycommon/heartbeat_process/heartbeat_process_worker.py +0 -0
  212. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycommon/llm/__init__.py +0 -0
  213. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycommon/llm/embedding.py +0 -0
  214. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycommon/llm/get_llm.py +0 -0
  215. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycommon/llm/llm_logger.py +0 -0
  216. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycommon/llm/llm_tokens.py +0 -0
  217. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycommon/llm/llm_with_token_tracking.py +0 -0
  218. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycommon/llm/native_with_fallback_runnable.py +0 -0
  219. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycommon/llm/output_fixing_runnable.py +0 -0
  220. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycommon/llm/struct_token.py +0 -0
  221. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycommon/llm/sy_langfuse.py +0 -0
  222. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycommon/llm/tiktoken_cache/9b5ad71b2ce5302211f9c61530b329a4922fc6a4 +0 -0
  223. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycommon/llm/tiktoken_cache/fb374d419588a4632f3f557e76b4b70aebbca790 +0 -0
  224. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycommon/llm/token_usage_es_service.py +0 -0
  225. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycommon/llm/token_usage_mysql_service.py +0 -0
  226. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycommon/llm/token_utils.py +0 -0
  227. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycommon/llm/usage_token.py +0 -0
  228. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycommon/logging/__init__.py +0 -0
  229. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycommon/logging/async_sql_logger.py +0 -0
  230. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycommon/logging/kafka_log.py +0 -0
  231. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycommon/logging/log_masker.py +0 -0
  232. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycommon/logging/logger_levels.py +0 -0
  233. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycommon/logging/logger_wrapper.py +0 -0
  234. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycommon/logging/process_logger.py +0 -0
  235. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycommon/logging/sql_logger.py +0 -0
  236. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycommon/mcp_server/__init__.py +0 -0
  237. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycommon/mcp_server/server.py +0 -0
  238. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycommon/middleware/__init__.py +0 -0
  239. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycommon/middleware/context.py +0 -0
  240. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycommon/middleware/cors.py +0 -0
  241. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycommon/middleware/docs.py +0 -0
  242. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycommon/middleware/exception.py +0 -0
  243. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycommon/middleware/middleware.py +0 -0
  244. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycommon/middleware/monitor_memory.py +0 -0
  245. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycommon/middleware/mq.py +0 -0
  246. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycommon/middleware/sandbox.py +0 -0
  247. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycommon/middleware/timeout.py +0 -0
  248. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycommon/middleware/token_tracking.py +0 -0
  249. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycommon/middleware/tool_result_truncation.py +0 -0
  250. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycommon/middleware/traceid.py +0 -0
  251. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycommon/models/__init__.py +0 -0
  252. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycommon/models/base_http.py +0 -0
  253. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycommon/models/log.py +0 -0
  254. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycommon/models/mcp_server_config.py +0 -0
  255. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycommon/models/mqlistener_config.py +0 -0
  256. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycommon/models/mqmsg_model.py +0 -0
  257. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycommon/models/mqsend_config.py +0 -0
  258. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycommon/models/sandbox.py +0 -0
  259. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycommon/models/sso_user.py +0 -0
  260. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycommon/models/token_usage.py +0 -0
  261. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycommon/models/token_usage_mysql.py +0 -0
  262. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycommon/models/xxljob_handler_config.py +0 -0
  263. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycommon/notice/__init__.py +0 -0
  264. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycommon/notice/uvicorn_monitor.py +0 -0
  265. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycommon/notice/wecom_message.py +0 -0
  266. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycommon/rabbitmq/process_pool_consumer.py +0 -0
  267. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycommon/rabbitmq/rabbitmq_client.py +0 -0
  268. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycommon/rabbitmq/rabbitmq_pool.py +0 -0
  269. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycommon/rabbitmq/rabbitmq_service.py +0 -0
  270. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycommon/rabbitmq/rabbitmq_service_client_manager.py +0 -0
  271. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycommon/rabbitmq/rabbitmq_service_connection_monitor.py +0 -0
  272. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycommon/rabbitmq/rabbitmq_service_consumer_manager.py +0 -0
  273. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycommon/rabbitmq/rabbitmq_service_core.py +0 -0
  274. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycommon/rabbitmq/rabbitmq_service_producer_manager.py +0 -0
  275. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycommon/sentry/__init__.py +0 -0
  276. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycommon/sentry/sy_sentry.py +0 -0
  277. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycommon/services.py +0 -0
  278. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycommon/sse/__init__.py +0 -0
  279. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycommon/sse/event.py +0 -0
  280. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycommon/sse/sse.py +0 -0
  281. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycommon/synacos/__init__.py +0 -0
  282. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycommon/synacos/example.py +0 -0
  283. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycommon/synacos/example2.py +0 -0
  284. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycommon/synacos/feign.py +0 -0
  285. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycommon/synacos/feign_client.py +0 -0
  286. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycommon/synacos/nacos_client_base.py +0 -0
  287. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycommon/synacos/nacos_config_manager.py +0 -0
  288. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycommon/synacos/nacos_heartbeat_manager.py +0 -0
  289. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycommon/synacos/nacos_service.py +0 -0
  290. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycommon/synacos/nacos_service_discovery.py +0 -0
  291. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycommon/synacos/nacos_service_registration.py +0 -0
  292. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycommon/synacos/param.py +0 -0
  293. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycommon/tests/deep_agent_server.py +0 -0
  294. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycommon/tests/test_consistent_hash.py +0 -0
  295. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycommon/tests/test_consumer_loss_rootcause.py +0 -0
  296. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycommon/tests/test_consumer_recovery.py +0 -0
  297. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycommon/tests/test_deep_agent.py +0 -0
  298. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycommon/tests/test_dynamic_max_tokens.py +0 -0
  299. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycommon/tests/test_email.py +0 -0
  300. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycommon/tests/test_encoding_cache.py +0 -0
  301. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycommon/tests/test_fix_verification.py +0 -0
  302. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycommon/tests/test_mcp_server.py +0 -0
  303. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycommon/tests/test_minimax_reasoning.py +0 -0
  304. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycommon/tests/test_mq.py +0 -0
  305. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycommon/tests/test_oa_login.py +0 -0
  306. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycommon/tests/test_queue_priority_fallback.py +0 -0
  307. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycommon/tests/test_real_summarization.py +0 -0
  308. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycommon/tests/test_summarization_config.py +0 -0
  309. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycommon/tests/test_summarization_real.py +0 -0
  310. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycommon/tests/test_summary_leak_e2e.py +0 -0
  311. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycommon/tools/__init__.py +0 -0
  312. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycommon/tools/async_utils.py +0 -0
  313. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycommon/tools/docs.py +0 -0
  314. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycommon/tools/env.py +0 -0
  315. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycommon/tools/merge_headers.py +0 -0
  316. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycommon/tools/snowflake.py +0 -0
  317. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycommon/tools/syemail.py +0 -0
  318. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycommon/tools/timing.py +0 -0
  319. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycommon/xxljob/__init__.py +0 -0
  320. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycommon/xxljob/xxljob_service.py +0 -0
  321. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycommon_python_lib.egg-info/dependency_links.txt +0 -0
  322. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycommon_python_lib.egg-info/entry_points.txt +0 -0
  323. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/src/sycommon_python_lib.egg-info/top_level.txt +0 -0
  324. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/tests/test_acp_tool.py +0 -0
  325. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/tests/test_asyncio_logging.py +0 -0
  326. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/tests/test_config_change_notifier.py +0 -0
  327. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/tests/test_hotreload_snapshot.py +0 -0
  328. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/tests/test_llm_apikey_contextvar.py +0 -0
  329. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/tests/test_log_masker.py +0 -0
  330. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/tests/test_resilient_pg_saver.py +0 -0
  331. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/tests/test_sandbox_path_guard.py +0 -0
  332. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/tests/test_sensitive_guard.py +0 -0
  333. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/tests/test_simple_chat_agent.py +0 -0
  334. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/tests/test_skill_regex_upgrade.py +0 -0
  335. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/tests/test_skill_write_guard.py +0 -0
  336. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/tests/test_sycli.py +0 -0
  337. {sycommon_python_lib-0.2.7a30 → sycommon_python_lib-0.2.7a32}/tests/test_sync_skills_to_sandbox.py +0 -0
@@ -1,10 +1,10 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: sycommon-python-lib
3
- Version: 0.2.7a30
3
+ Version: 0.2.7a32
4
4
  Summary: Add your description here
5
5
  Requires-Python: >=3.11
6
6
  Description-Content-Type: text/markdown
7
- Requires-Dist: aio-pika==9.6.2
7
+ Requires-Dist: aio-pika==10.0.1
8
8
  Requires-Dist: aiohttp==3.14.1
9
9
  Requires-Dist: aiomysql==0.3.2
10
10
  Requires-Dist: anyio==4.14.1
@@ -13,12 +13,12 @@ Requires-Dist: deepagents==0.6.12
13
13
  Requires-Dist: elasticsearch==9.4.1
14
14
  Requires-Dist: fastapi==0.139.0
15
15
  Requires-Dist: jinja2==3.1.6
16
- Requires-Dist: kafka-python==3.0.7
17
- Requires-Dist: langchain==1.3.12
16
+ Requires-Dist: kafka-python==3.0.8
17
+ Requires-Dist: langchain==1.3.13
18
18
  Requires-Dist: langchain-core==1.4.9
19
- Requires-Dist: langchain-openai==1.3.4
20
- Requires-Dist: langfuse==4.13.2
21
- Requires-Dist: langgraph==1.2.8
19
+ Requires-Dist: langchain-openai==1.3.5
20
+ Requires-Dist: langfuse==4.14.0
21
+ Requires-Dist: langgraph==1.2.9
22
22
  Requires-Dist: langgraph-checkpoint-postgres==3.1.0
23
23
  Requires-Dist: langgraph-checkpoint-redis==0.5.0
24
24
  Requires-Dist: ldap3==2.9.1
@@ -1,11 +1,11 @@
1
1
  [project]
2
2
  name = "sycommon-python-lib"
3
- version = "0.2.7a30"
3
+ version = "0.2.7a32"
4
4
  description = "Add your description here"
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.11"
7
7
  dependencies = [
8
- "aio-pika==9.6.2",
8
+ "aio-pika==10.0.1",
9
9
  "aiohttp==3.14.1",
10
10
  "aiomysql==0.3.2",
11
11
  "anyio==4.14.1",
@@ -14,12 +14,12 @@ dependencies = [
14
14
  "elasticsearch==9.4.1",
15
15
  "fastapi==0.139.0",
16
16
  "jinja2==3.1.6",
17
- "kafka-python==3.0.7",
18
- "langchain==1.3.12",
17
+ "kafka-python==3.0.8",
18
+ "langchain==1.3.13",
19
19
  "langchain-core==1.4.9",
20
- "langchain-openai==1.3.4",
21
- "langfuse==4.13.2",
22
- "langgraph==1.2.8",
20
+ "langchain-openai==1.3.5",
21
+ "langfuse==4.14.0",
22
+ "langgraph==1.2.9",
23
23
  "langgraph-checkpoint-postgres==3.1.0",
24
24
  "langgraph-checkpoint-redis==0.5.0",
25
25
  "ldap3==2.9.1",
@@ -98,12 +98,13 @@ def _patch_agent_streaming(agent):
98
98
  删除此函数及调用即可。
99
99
  """
100
100
  # 已验证兼容的版本范围(超出仅警告, 不阻断 —— 闭包强校验是真正的安全网)
101
- # 1.3.10/1.3.11/1.3.12 + langchain_core 1.4.8/1.4.9 经实测确认闭包结构兼容
102
- # (factory.py 在 1.3.11→1.3.12 字节级无变化: amodel_node freevars
103
- # _execute_model_async, 内层 freevars 含 _get_bound_model/_handle_model_output),
104
- # patch 正常生效。1.3.12 的 _execute_model_async 仍为 ainvoke + 不传 config,
105
- # 官方未修复, 补丁仍需保留。
106
- _VERIFIED = {"langchain": "1.3.12", "langchain_core": "1.4.9"}
101
+ # 1.3.10/1.3.11/1.3.12/1.3.13 + langchain_core 1.4.8/1.4.9 确认闭包结构兼容
102
+ # (factory.py 在 1.3.12→1.3.13 逐字节无变化 —— PyPI sdist diff 实证;
103
+ # amodel_node freevars 含 _execute_model_async, 内层 freevars 含
104
+ # _get_bound_model/_handle_model_output), patch 正常生效。
105
+ # 1.3.13 的 _execute_model_async 仍为 ainvoke + 不传 config (factory.py:1467),
106
+ # 官方仍未修复, 补丁仍需保留。
107
+ _VERIFIED = {"langchain": "1.3.13", "langchain_core": "1.4.9"}
107
108
  try:
108
109
  import langchain as _lc
109
110
  import langchain_core as _lcc
@@ -350,15 +350,11 @@ async def _load_one_server(
350
350
  pass
351
351
  return []
352
352
  except asyncio.CancelledError:
353
- # 单飞失败透传的哨兵(_discover_with_cache 失败时唤醒等待者用),按失败处理
354
- SYLogger.warning(
355
- f"[MCP] 服务器 '{config.name}' ({config.server_url}) 发现失败,跳过")
356
- if on_server_failure:
357
- try:
358
- await on_server_failure(config.id, "发现失败")
359
- except Exception:
360
- pass
361
- return []
353
+ # 外层取消(如会话重置 cancel 后台 _mcp_task)→ 必须向上传播,不能吞。
354
+ # 吞掉会让 load_mcp_tools_background 的 `except CancelledError: raise` 守卫失效、
355
+ # 任务被标记为正常完成而非已取消。单飞失败的哨兵是 RuntimeError(走下方 except Exception)
356
+ # 不会进这个分支,故这里只需 raise。
357
+ raise
362
358
  except Exception as e:
363
359
  SYLogger.warning(
364
360
  f"[MCP] 服务器 '{config.name}' ({config.server_url}) 连接失败,跳过: {e}")
@@ -72,6 +72,19 @@ class DowngradeState:
72
72
  self.last_source = source
73
73
  return True
74
74
 
75
+ async def reset(self, source: str = "user_input") -> None:
76
+ """清除降级标记(带锁,CAS 契约一致)。
77
+
78
+ 应用层在「命中敏感后想放行下一轮重检」场景(如 block 模式阻断后,
79
+ 用户切走/换 thread 重建 agent)应调本方法,而不是直接写
80
+ `state.downgraded = False`(无锁、绕过 CAS)。单 agent 下两者等价,
81
+ 但 multi-agent 共享状态或未来跨 task 重置时,无锁直写会与
82
+ mark_downgraded 的 CAS 真竞态——本方法是唯一安全的重置入口。
83
+ """
84
+ async with self._lock:
85
+ self.downgraded = False
86
+ self.last_source = source
87
+
75
88
 
76
89
  DEFAULT_DETECT_PROMPT = """你是数据脱敏分类器。判断以下「即将发送给外部云模型」的对话上下文是否包含不宜外流的敏感数据,只回答结构化字段(is_sensitive + reason + source)。
77
90
 
@@ -24,9 +24,24 @@ from sycommon.logging.kafka_log import SYLogger
24
24
  # 日期快照功能预留,当前暂不启用
25
25
  _SNAPSHOT_ENABLED = False
26
26
 
27
- # restore_from_minio 的 MinIO 下载并发度(同时下载的文件数上限)。
28
- # 与 _sync_batch(sync→minio 方向)的 batch_size 对齐为 5,避免压垮 MinIO/网络。
29
- _RESTORE_CONCURRENCY = 5
27
+ # restore_from_minio 的 MinIO 下载并发度。
28
+ # 两层信号量:
29
+ # - 单用户层 _RESTORE_PER_USER:每个用户恢复时最多 5 路并发下载(单用户恢复够快);
30
+ # - 全局层 _RESTORE_GLOBAL_CAP:全进程最多 100 路下载,多用户同时恢复时全局封顶,
31
+ # 避免无限放大压垮 MinIO/网络,又留足并发让多用户恢复不互相拖慢。
32
+ # 单用户独享 5 槽 + 全局封顶 100。
33
+ _RESTORE_PER_USER = 5
34
+ _RESTORE_GLOBAL_CAP = 100
35
+ # 全局信号量惰性创建(绑定到首次调用时的 event loop;单 loop 部署下不变)。
36
+ _RESTORE_DOWNLOAD_SEM: "asyncio.Semaphore | None" = None
37
+
38
+
39
+ def _get_restore_download_sem() -> "asyncio.Semaphore":
40
+ """惰性创建全局下载信号量。"""
41
+ global _RESTORE_DOWNLOAD_SEM
42
+ if _RESTORE_DOWNLOAD_SEM is None:
43
+ _RESTORE_DOWNLOAD_SEM = asyncio.Semaphore(_RESTORE_GLOBAL_CAP)
44
+ return _RESTORE_DOWNLOAD_SEM
30
45
 
31
46
 
32
47
  class MinioSyncService(metaclass=SingletonMeta):
@@ -763,15 +778,18 @@ class MinioSyncService(metaclass=SingletonMeta):
763
778
 
764
779
  SYLogger.info(f"[MinIO] 需恢复 {len(to_restore)} 个文件到沙箱: user={user_id}")
765
780
 
766
- # 4. 并发恢复:MinIO 下载用全局 Semaphore(5) 限流并发,沙箱上传仍按批 batch_upload。
767
- # 旧实现是「批内串行下载 + 批间串行」,N 个文件 ≈ N 次串行 MinIO GET,27 个文件要数十秒。
768
- # 改为 Semaphore(5) 后下载并发,总耗时 ≈ ceil(N/5) 次串行往返,对齐 _sync_batch 的并发度。
781
+ # 4. 并发恢复:两层限流。
782
+ # - per_user_sem(每次 restore 新建,本用户独享 5 槽):单用户恢复够快;
783
+ # - global_sem(进程级 15 槽):多用户同时恢复时全局封顶,防 5 路下载
784
+ # 打满线程池、挤占主请求路径的沙箱操作。
785
+ # 下载协程先抢本用户 5 槽、再抢全局 15 槽,故实际并发 = min(本用户待下载, 全局剩余)。
769
786
  restored = 0
770
- download_sem = asyncio.Semaphore(_RESTORE_CONCURRENCY)
787
+ global_sem = _get_restore_download_sem()
788
+ per_user_sem = asyncio.Semaphore(_RESTORE_PER_USER)
771
789
 
772
790
  async def _download_one(rel_path: str):
773
791
  """下载单个 MinIO 对象到内存,返回 (沙箱绝对路径, 内容) 或 None。"""
774
- async with download_sem:
792
+ async with per_user_sem, global_sem:
775
793
  try:
776
794
  def _download_object(bucket, key):
777
795
  resp = self._client.get_object(bucket, key)
@@ -786,18 +804,18 @@ class MinioSyncService(metaclass=SingletonMeta):
786
804
  )
787
805
  return (f"/{rel_path}", content)
788
806
  except Exception as e:
789
- SYLogger.warning(f"[MinIO] 下载文件失败: {rel_path}, error={e}")
807
+ SYLogger.warning(f"[MinIO] 下载文件失败: {rel_path}, error: {e}")
790
808
  return None
791
809
 
792
- # 全量并发下载( Semaphore 限流),比按批串行快得多
810
+ # 全量并发下载(受两层 Semaphore 限流),比按批串行快得多
793
811
  download_results = await asyncio.gather(
794
812
  *[_download_one(rp) for rp in to_restore]
795
813
  )
796
814
  downloaded = [r for r in download_results if r is not None]
797
815
 
798
816
  # 上传仍走 batch_upload(服务端并发),按 5 个一批发(沙箱端点对超大批量可能限流)
799
- for i in range(0, len(downloaded), _RESTORE_CONCURRENCY):
800
- batch = downloaded[i:i + _RESTORE_CONCURRENCY]
817
+ for i in range(0, len(downloaded), _RESTORE_PER_USER):
818
+ batch = downloaded[i:i + _RESTORE_PER_USER]
801
819
  if not batch:
802
820
  continue
803
821
  try:
@@ -42,6 +42,13 @@ try:
42
42
  from langchain_core.exceptions import ContextOverflowError
43
43
 
44
44
  _orig_handle_bad_request = _lc_oai_base._handle_openai_bad_request
45
+ _orig_handle_api_error = _lc_oai_base._handle_openai_api_error
46
+
47
+ # langchain_openai 原生识别的上下文溢出模式(1.3.5 起 bad_request/api_error 各有):
48
+ # bad_request: "context_length_exceeded" / "Input tokens exceed the configured
49
+ # limit" / "prompt is too long"
50
+ # api_error : "exceeds the context window" ← 1.3.5 新增
51
+ # 这些都不覆盖 MiniMax/vLLM 的 "maximum context length is ..." 句式, 下方扩展补上。
45
52
 
46
53
  def _patched_handle_openai_bad_request(e: openai.BadRequestError) -> None:
47
54
  """扩展版 _handle_openai_bad_request,识别更多上下文溢出错误格式。"""
@@ -58,14 +65,11 @@ try:
58
65
  message=e.message, response=e.response, body=e.body
59
66
  ) from e
60
67
 
61
- # 回退到原始处理逻辑
68
+ # 回退到原始处理逻辑(含官方的 context_length_exceeded 等识别)
62
69
  _orig_handle_bad_request(e)
63
70
 
64
71
  _lc_oai_base._handle_openai_bad_request = _patched_handle_openai_bad_request
65
72
 
66
- # 同步 patch _handle_openai_api_error
67
- _orig_handle_api_error = _lc_oai_base._handle_openai_api_error
68
-
69
73
  def _patched_handle_openai_api_error(e: openai.APIError) -> None:
70
74
  """扩展版 _handle_openai_api_error,识别更多上下文溢出错误格式。"""
71
75
  error_str = str(e)
@@ -73,6 +77,7 @@ try:
73
77
  raise _lc_oai_base.OpenAIAPIContextOverflowError(
74
78
  message=e.message, request=e.request, body=e.body
75
79
  ) from e
80
+ # 回退到原始处理逻辑(含官方 1.3.5 新增的 "exceeds the context window" 识别)
76
81
  _orig_handle_api_error(e)
77
82
 
78
83
  _lc_oai_base._handle_openai_api_error = _patched_handle_openai_api_error
@@ -0,0 +1,153 @@
1
+ """aio-pika 10 升级端到端验证(真实 RabbitMQ)。
2
+
3
+ 验证 aio-pika 9.6.2 → 10.0.1(aiormq 6→7)升级的核心风险点:
4
+ 1. 普通连接 connect() 的 connect+channel+publish+consume 全链路
5
+ 2. connect_robust() + RobustConnection(robust 模块在 v10 仍保留)
6
+ 3. Connection.Close 帧解析能力(用于诊断 vhost 权限等问题)
7
+
8
+ 连接配置取自 shengye-platform-digital-work 的 nacos-data 快照(mq.yml)。
9
+ rabbit 用户对 /uat 无权限(broker ACL),对 / 有权限;本测试用 / 验证连通性,
10
+ /uat 的权限问题与本次升级无关,仅在 e2e 验证时记录为已知差异。
11
+
12
+ 运行方式(pytest 或直接 python):
13
+ uv run python -m pytest src/sycommon/tests/test_upgrade_aio_pika.py -v -s
14
+ python src/sycommon/tests/test_upgrade_aio_pika.py
15
+ """
16
+ import asyncio
17
+ import os
18
+ import sys
19
+
20
+ import pytest
21
+
22
+ sys.path.insert(0, os.path.join(os.path.dirname(__file__), ".."))
23
+
24
+ import aio_pika
25
+ from importlib.metadata import version
26
+
27
+ # nacos mq.yml 配置
28
+ MQ_HOST = "rabbitmq.test1.svc.k8s.syf.com"
29
+ MQ_PORT = 5672
30
+ MQ_USER = "rabbit"
31
+ MQ_PASS = "SU7BrhDfbGbH"
32
+ # rabbit 用户对 / 有权限;mq.yml 里的 /uat 是另一套授权用户才能访问的 vhost
33
+ MQ_VHOST_OK = "/"
34
+ MQ_VHOST_UAT = "uat"
35
+
36
+ TEST_QUEUE = "sycommon_upgrade_test"
37
+ TEST_MSG = b"upgrade-test"
38
+
39
+
40
+ def _url(vhost: str) -> str:
41
+ return f"amqp://{MQ_USER}:{MQ_PASS}@{MQ_HOST}:{MQ_PORT}/{vhost}"
42
+
43
+
44
+ def test_aio_pika_versions_pinned():
45
+ """v10 依赖链:aio-pika 10 / aiormq 7 / pamqp 4。"""
46
+ assert aio_pika.__version__ == "10.0.1", (
47
+ f"aio-pika 应为 10.0.1, 实际 {aio_pika.__version__}")
48
+ assert version("aiormq").split(".")[0] == "7", (
49
+ f"aiormq 主版本应为 7, 实际 {version('aiormq')}")
50
+ assert version("pamqp").split(".")[0] == "4", (
51
+ f"pamqp 主版本应为 4, 实际 {version('pamqp')}")
52
+ print(f" [OK] aio-pika={aio_pika.__version__} "
53
+ f"aiormq={version('aiormq')} pamqp={version('pamqp')}")
54
+
55
+
56
+ def test_roundtrip_plain_connection():
57
+ """普通连接:connect + channel + declare_queue + publish + get 全链路。"""
58
+ async def go():
59
+ conn = await aio_pika.connect(_url(MQ_VHOST_OK), timeout=10)
60
+ async with conn:
61
+ ch = await conn.channel()
62
+ q = await ch.declare_queue(TEST_QUEUE, auto_delete=True)
63
+ await ch.default_exchange.publish(
64
+ aio_pika.Message(body=TEST_MSG), routing_key=TEST_QUEUE)
65
+ msg = await q.get(timeout=5, no_ack=True)
66
+ return msg.body
67
+
68
+ body = asyncio.run(go())
69
+ assert body == TEST_MSG, f"收发不一致: {body!r}"
70
+ print(f" [OK] 普通连接 roundtrip: body={body!r}")
71
+
72
+
73
+ def test_robust_connection_roundtrip():
74
+ """connect_robust 返回 RobustConnection,robust 模块在 v10 仍存在且工作。"""
75
+ async def go():
76
+ conn: aio_pika.RobustConnection = await aio_pika.connect_robust(
77
+ _url(MQ_VHOST_OK), timeout=10)
78
+ info = {
79
+ "type": type(conn).__name__,
80
+ "is_robust": issubclass(type(conn), aio_pika.RobustConnection),
81
+ "reconnect_interval": conn.reconnect_interval,
82
+ }
83
+ async with conn:
84
+ ch = await conn.channel()
85
+ info["channel_type"] = type(ch).__name__
86
+ q = await ch.declare_queue(TEST_QUEUE, auto_delete=True)
87
+ got = asyncio.Event()
88
+ received = []
89
+
90
+ async def consumer(message: aio_pika.IncomingMessage):
91
+ received.append(message.body)
92
+ got.set()
93
+
94
+ await q.consume(consumer, no_ack=True)
95
+ await ch.default_exchange.publish(
96
+ aio_pika.Message(body=TEST_MSG), routing_key=TEST_QUEUE)
97
+ await asyncio.wait_for(got.wait(), timeout=5)
98
+ info["body"] = received[0]
99
+ return info
100
+
101
+ info = asyncio.run(go())
102
+ assert info["is_robust"], "connect_robust 未返回 RobustConnection 子类"
103
+ assert info["type"] == "RobustConnection", f"连接类型异常: {info['type']}"
104
+ assert info["channel_type"] == "RobustChannel", (
105
+ f"channel 非鲁棒类型: {info['channel_type']}")
106
+ assert info["body"] == TEST_MSG, f"robust 收发不一致: {info['body']!r}"
107
+ print(f" [OK] RobustConnection roundtrip: "
108
+ f"type={info['type']} channel={info['channel_type']} "
109
+ f"reconnect_interval={info['reconnect_interval']} body={info['body']!r}")
110
+
111
+
112
+ def test_uat_vhost_permission_known_issue():
113
+ """记录已知差异:rabbit 用户对 /uat 无权限(broker ACL,与升级无关)。
114
+
115
+ 断言它确实被 broker 拒绝(reply_text 含 NOT_ALLOWED),以便未来
116
+ broker 授权变更时本测试会主动失败提醒复核。
117
+ """
118
+ async def go():
119
+ conn = await aio_pika.connect(_url(MQ_VHOST_UAT), timeout=10)
120
+ async with conn:
121
+ pass
122
+
123
+ try:
124
+ asyncio.run(go())
125
+ # 如果将来 /uat 对 rabbit 开放了权限,连接会成功 —— 提示复核
126
+ pytest.fail(
127
+ "/uat 现在可连了:broker 可能已给 rabbit 授权,请复核 mq.yml 配置")
128
+ except Exception as e: # noqa: BLE001
129
+ cl = e.args[1] if len(getattr(e, "args", ())) > 1 else None
130
+ detail = ""
131
+ if cl is not None and hasattr(cl, "marshal"):
132
+ detail = cl.marshal().decode("latin1", "replace")
133
+ assert "NOT_ALLOWED" in detail, (
134
+ f"/uat 被拒但原因非权限问题,请复核: {detail!r}")
135
+ print(f" [OK] /uat 确实因权限被拒(已知差异,与升级无关): "
136
+ f"{detail[:60]!r}")
137
+
138
+
139
+ if __name__ == "__main__":
140
+ # 直接运行模式(与 test_consumer_recovery.py 一致的 __main__ 风格)
141
+ async def main():
142
+ print("=" * 70)
143
+ print(" aio-pika 10 升级端到端验证")
144
+ print("=" * 70)
145
+ test_aio_pika_versions_pinned()
146
+ test_roundtrip_plain_connection()
147
+ test_robust_connection_roundtrip()
148
+ test_uat_vhost_permission_known_issue()
149
+ print("=" * 70)
150
+ print(" 全部通过")
151
+ print("=" * 70)
152
+
153
+ asyncio.run(main())
@@ -0,0 +1,131 @@
1
+ """langgraph agent 流式升级端到端验证(真实 LLM)。
2
+
3
+ 验证 langchain 1.2.12→1.3.13 + langgraph 1.2.8→1.2.9 + streaming 补丁
4
+ 在真实 LLM 网关下,stream_mode="messages" 逐 token 触发 on_llm_new_token。
5
+
6
+ 覆盖升级核心风险点:
7
+ 1. 底层 ChatOpenAI.astream() 能逐 token 触发 on_llm_new_token
8
+ 2. deepagents 的 model node(_execute_model_async)经补丁替换为 astream+config 后,
9
+ agent.astream(stream_mode="messages") 正常产出消息片段
10
+
11
+ 连接配置取自 nacos-data llm 配置(10.10.6.132:3000 网关)。
12
+
13
+ CI/无内网环境默认跳过;连接到内网网关时显式开启:
14
+ SYCOMMON_E2E_LLM=1 uv run python -m pytest src/sycommon/tests/test_upgrade_langgraph_stream.py -v -s
15
+ python src/sycommon/tests/test_upgrade_langgraph_stream.py
16
+ """
17
+ import asyncio
18
+ import os
19
+ import sys
20
+
21
+ import pytest
22
+
23
+ sys.path.insert(0, os.path.join(os.path.dirname(__file__), ".."))
24
+
25
+ from langchain_openai import ChatOpenAI
26
+ from langchain_core.messages import HumanMessage
27
+ from langchain_core.callbacks import BaseCallbackHandler
28
+
29
+ # nacos llm 配置
30
+ BASE_URL = "http://10.10.6.132:3000/v1"
31
+ API_KEY = "sk-gbDkgZb3JD6i2Mrwf0RfYJf8YuEiby7nozQmv99E2fxEdUIh"
32
+ MODEL = "glm-5-turbo"
33
+
34
+ # 无内网网关访问时跳过真实集成(pytest 收集仍可用)
35
+ _E2E_ENABLED = os.environ.get("SYCOMMON_E2E_LLM") == "1"
36
+ _skip_no_intranet = pytest.mark.skipif(
37
+ not _E2E_ENABLED,
38
+ reason="需要内网 LLM 网关访问;设置 SYCOMMON_E2E_LLM=1 启用",
39
+ )
40
+
41
+
42
+ class _TokenCollector(BaseCallbackHandler):
43
+ """统计 on_llm_new_token 触发次数。"""
44
+
45
+ def __init__(self):
46
+ self.tokens = 0
47
+
48
+ def on_llm_new_token(self, token, **kwargs): # noqa: D401
49
+ self.tokens += 1
50
+
51
+
52
+ def _make_model(max_tokens: int = 50) -> ChatOpenAI:
53
+ return ChatOpenAI(
54
+ model=MODEL, base_url=BASE_URL, api_key=API_KEY,
55
+ streaming=True, temperature=0.0, max_tokens=max_tokens,
56
+ extra_body={"stream_options": {"include_usage": True}},
57
+ )
58
+
59
+
60
+ @_skip_no_intranet
61
+ def test_underlying_astream_triggers_token_callbacks():
62
+ """底层 model.astream() 逐 token 触发 on_llm_new_token。"""
63
+ async def go():
64
+ model = _make_model()
65
+ collector = _TokenCollector()
66
+ chunks = 0
67
+ async for _chunk in model.astream(
68
+ [HumanMessage(content="用一句话介绍你自己")],
69
+ config={"callbacks": [collector]},
70
+ ):
71
+ chunks += 1
72
+ return chunks, collector.tokens
73
+
74
+ chunks, tokens = asyncio.run(go())
75
+ assert chunks > 0, "astream 无产出"
76
+ assert tokens > 0, "on_llm_new_token 未触发 —— 流式回调链路断了"
77
+ print(f" [OK] astream chunks={chunks}, on_llm_new_token 触发 {tokens} 次")
78
+
79
+
80
+ @_skip_no_intranet
81
+ def test_agent_stream_mode_messages(monkeypatch):
82
+ """端到端:deepagents agent + streaming 补丁 → stream_mode='messages' 产出。
83
+
84
+ 这是 streaming 补丁(deep_agent.py:_patch_agent_streaming)要修复的核心场景:
85
+ 官方 factory._execute_model_async 用 ainvoke 且不传 config,导致回调不触发;
86
+ 补丁替换为 astream + 从 ContextVar 读 config,使 on_llm_new_token 透传到
87
+ stream_mode="messages" 消费者。
88
+ """
89
+ from deepagents import create_deep_agent
90
+ from langgraph.checkpoint.memory import MemorySaver
91
+
92
+ agent = create_deep_agent(
93
+ model=_make_model(), tools=[], middleware=(), checkpointer=MemorySaver(),
94
+ )
95
+ from sycommon.agent.deep_agent import _patch_agent_streaming
96
+ _patch_agent_streaming(agent)
97
+
98
+ async def go():
99
+ config = {"configurable": {"thread_id": "upgrade-stream-test"}}
100
+ message_chunks = 0
101
+ async for _stream_mode, _chunk in agent.astream(
102
+ {"messages": [HumanMessage(content="用一个词回答:你好")]},
103
+ config=config,
104
+ stream_mode="messages",
105
+ ):
106
+ message_chunks += 1
107
+ if message_chunks > 200: # 防御性截断
108
+ break
109
+ return message_chunks
110
+
111
+ message_chunks = asyncio.run(go())
112
+ assert message_chunks > 0, (
113
+ "stream_mode='messages' 无产出 —— 补丁未生效或流式链路断了")
114
+ print(f" [OK] agent stream_mode='messages' 产出 {message_chunks} 个消息片段")
115
+
116
+
117
+ if __name__ == "__main__":
118
+ async def main():
119
+ print("=" * 70)
120
+ print(" langgraph agent 流式升级端到端验证")
121
+ print("=" * 70)
122
+ if not _E2E_ENABLED:
123
+ print(" [SKIP] 未设置 SYCOMMON_E2E_LLM=1,跳过(需内网 LLM 网关)")
124
+ return
125
+ test_underlying_astream_triggers_token_callbacks()
126
+ test_agent_stream_mode_messages(None)
127
+ print("=" * 70)
128
+ print(" 全部通过")
129
+ print("=" * 70)
130
+
131
+ asyncio.run(main())