sycommon-python-lib 0.2.7a51__tar.gz → 0.2.7a53__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 (351) hide show
  1. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/PKG-INFO +13 -13
  2. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/pyproject.toml +13 -13
  3. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/agent/deep_agent.py +77 -272
  4. sycommon_python_lib-0.2.7a53/src/sycommon/agent/middleware/model_request_prep.py +139 -0
  5. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/agent/multi_agent_team.py +9 -1
  6. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/agent/resume_compactor.py +24 -6
  7. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/agent/sandbox/file_ops.py +84 -28
  8. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/agent/sandbox/http_sandbox_backend.py +275 -93
  9. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/middleware/sandbox.py +252 -56
  10. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/models/sandbox.py +14 -2
  11. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/tests/test_upgrade_langgraph_stream.py +24 -15
  12. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/tests/test_upgrade_verification.py +32 -100
  13. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon_python_lib.egg-info/PKG-INFO +13 -13
  14. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon_python_lib.egg-info/SOURCES.txt +1 -0
  15. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon_python_lib.egg-info/requires.txt +12 -12
  16. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/README.md +0 -0
  17. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/setup.cfg +0 -0
  18. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/command/__init__.py +0 -0
  19. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/command/cli.py +0 -0
  20. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/command/core/__init__.py +0 -0
  21. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/command/core/console.py +0 -0
  22. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/command/core/models.py +0 -0
  23. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/command/core/project.py +0 -0
  24. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/command/core/utils.py +0 -0
  25. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/command/templates/__init__.py +0 -0
  26. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/command/templates/agent/README.md.tpl +0 -0
  27. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/command/templates/agent/__init__.py +0 -0
  28. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/command/templates/agent/agent/__init__.py.tpl +0 -0
  29. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/command/templates/agent/agent/main_agent.py.tpl +0 -0
  30. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/command/templates/agent/agent/nodes/__init__.py.tpl +0 -0
  31. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/command/templates/agent/agent/nodes/example_node.py.tpl +0 -0
  32. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/command/templates/agent/agent/states/__init__.py.tpl +0 -0
  33. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/command/templates/agent/agent/states/agent_state.py.tpl +0 -0
  34. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/command/templates/agent/api/__init__.py.tpl +0 -0
  35. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/command/templates/agent/api/query.py.tpl +0 -0
  36. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/command/templates/agent/api/sse/__init__.py.tpl +0 -0
  37. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/command/templates/agent/api/sse/agent.py.tpl +0 -0
  38. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/command/templates/agent/app.py.tpl +0 -0
  39. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/command/templates/agent/client/__init__.py.tpl +0 -0
  40. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/command/templates/agent/db/__init__.py.tpl +0 -0
  41. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/command/templates/agent/db/model/__init__.py.tpl +0 -0
  42. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/command/templates/agent/db/model/entity.py.tpl +0 -0
  43. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/command/templates/agent/db/service.py.tpl +0 -0
  44. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/command/templates/agent/model/__init__.py.tpl +0 -0
  45. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/command/templates/agent/model/parse.py.tpl +0 -0
  46. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/command/templates/agent/tools/__init__.py.tpl +0 -0
  47. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/command/templates/agent/tools/mq.py.tpl +0 -0
  48. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/command/templates/base/.env.tpl +0 -0
  49. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/command/templates/base/.gitignore.tpl +0 -0
  50. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/command/templates/base/Dockerfile.tpl +0 -0
  51. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/command/templates/base/README.md.tpl +0 -0
  52. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/command/templates/base/__init__.py +0 -0
  53. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/command/templates/base/app.py.tpl +0 -0
  54. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/command/templates/base/app.yaml.tpl +0 -0
  55. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/command/templates/base/client/FileServiceClient.py.tpl +0 -0
  56. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/command/templates/base/client/__init__.py.tpl +0 -0
  57. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/command/templates/base/model/__init__.py.tpl +0 -0
  58. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/command/templates/base/model/file_info.py.tpl +0 -0
  59. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/command/templates/base/requirements.txt.tpl +0 -0
  60. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/command/templates/cli/README.md.tpl +0 -0
  61. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/command/templates/cli/__init__.py +0 -0
  62. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/command/templates/cli/app.py.tpl +0 -0
  63. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/command/templates/cli/commands/__init__.py.tpl +0 -0
  64. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/command/templates/cli/commands/hello.py.tpl +0 -0
  65. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/command/templates/cli/pyproject.toml.tpl +0 -0
  66. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/command/templates/cli/tools/__init__.py.tpl +0 -0
  67. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/command/templates/web/README.md.tpl +0 -0
  68. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/command/templates/web/__init__.py +0 -0
  69. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/command/templates/web/api/__init__.py.tpl +0 -0
  70. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/command/templates/web/api/echo.py.tpl +0 -0
  71. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/command/templates/web/api/sse/__init__.py.tpl +0 -0
  72. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/command/templates/web/api/sse/echo.py.tpl +0 -0
  73. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/command/templates/web/app.py.tpl +0 -0
  74. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/command/templates/web/client/__init__.py.tpl +0 -0
  75. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/command/templates/web/model/__init__.py.tpl +0 -0
  76. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/command/templates/web/tools/__init__.py.tpl +0 -0
  77. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/command/templates/web/tools/mq.py.tpl +0 -0
  78. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/nexus/__init__.py +0 -0
  79. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycli/__init__.py +0 -0
  80. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycli/__main__.py +0 -0
  81. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycli/acp/__init__.py +0 -0
  82. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycli/acp/config.py +0 -0
  83. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycli/acp/executor.py +0 -0
  84. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycli/acp/registry.py +0 -0
  85. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycli/acp/server.py +0 -0
  86. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycli/agents/__init__.py +0 -0
  87. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycli/agents/factory.py +0 -0
  88. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycli/agents/prompts.py +0 -0
  89. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycli/cdp/__init__.py +0 -0
  90. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycli/cdp/browser.py +0 -0
  91. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycli/cdp/capabilities/__init__.py +0 -0
  92. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycli/cdp/capabilities/console.py +0 -0
  93. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycli/cdp/capabilities/dom.py +0 -0
  94. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycli/cdp/capabilities/network.py +0 -0
  95. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycli/cdp/capabilities/page_errors.py +0 -0
  96. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycli/cdp/capabilities/performance.py +0 -0
  97. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycli/cdp/capabilities/screenshot.py +0 -0
  98. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycli/cdp/client.py +0 -0
  99. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycli/cdp/protocol.py +0 -0
  100. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycli/cdp/repl.py +0 -0
  101. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycli/cli.py +0 -0
  102. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycli/commands/__init__.py +0 -0
  103. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycli/commands/acp_cmd.py +0 -0
  104. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycli/commands/cdp_cmd.py +0 -0
  105. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycli/commands/chat_cmd.py +0 -0
  106. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycli/commands/create_cmd.py +0 -0
  107. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycli/commands/evaluate_cmd.py +0 -0
  108. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycli/commands/init_cmd.py +0 -0
  109. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycli/commands/memory_cmd.py +0 -0
  110. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycli/commands/resume_cmd.py +0 -0
  111. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycli/commands/rollback_cmd.py +0 -0
  112. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycli/commands/run_cmd.py +0 -0
  113. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycli/core/__init__.py +0 -0
  114. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycli/core/backend.py +0 -0
  115. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycli/core/config.py +0 -0
  116. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycli/core/display.py +0 -0
  117. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycli/core/git_integration.py +0 -0
  118. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycli/core/llm.py +0 -0
  119. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycli/core/state.py +0 -0
  120. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycli/evaluate/__init__.py +0 -0
  121. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycli/evaluate/api_evaluator.py +0 -0
  122. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycli/memory/__init__.py +0 -0
  123. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycli/memory/compressor.py +0 -0
  124. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycli/memory/full.py +0 -0
  125. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycli/memory/hot.py +0 -0
  126. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycli/memory/manager.py +0 -0
  127. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycli/memory/warm.py +0 -0
  128. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycli/mode/__init__.py +0 -0
  129. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycli/mode/create.py +0 -0
  130. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycli/mode/optimize.py +0 -0
  131. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycli/models/__init__.py +0 -0
  132. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycli/models/config_models.py +0 -0
  133. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycli/rl/__init__.py +0 -0
  134. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycli/rl/baseline_tests.py +0 -0
  135. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycli/rl/checkpoint.py +0 -0
  136. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycli/rl/convergence.py +0 -0
  137. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycli/rl/diagnosis.py +0 -0
  138. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycli/rl/engine.py +0 -0
  139. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycli/rl/environment.py +0 -0
  140. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycli/rl/experience.py +0 -0
  141. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycli/rl/harness_prompts.py +0 -0
  142. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycli/rl/history.py +0 -0
  143. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycli/rl/optimization_logger.py +0 -0
  144. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycli/rl/pre_validation.py +0 -0
  145. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycli/rl/reward.py +0 -0
  146. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycli/rl/strategy_bandit.py +0 -0
  147. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycli/rl/strategy_generator.py +0 -0
  148. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycli/rl/strategy_prompts.py +0 -0
  149. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycli/simple_chat_agent.py +0 -0
  150. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycli/skills/__init__.py +0 -0
  151. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/__init__.py +0 -0
  152. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/agent/__init__.py +0 -0
  153. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/agent/acp/__init__.py +0 -0
  154. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/agent/acp/client.py +0 -0
  155. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/agent/acp/fetch.py +0 -0
  156. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/agent/acp/ssh_init.py +0 -0
  157. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/agent/acp/tool.py +0 -0
  158. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/agent/agent_manager.py +0 -0
  159. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/agent/chat_events.py +0 -0
  160. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/agent/mcp/__init__.py +0 -0
  161. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/agent/mcp/models.py +0 -0
  162. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/agent/mcp/tool_loader.py +0 -0
  163. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/agent/middleware/sandbox_path_guard.py +0 -0
  164. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/agent/middleware/sensitive_guard.py +0 -0
  165. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/agent/middleware/sitecustomize.py +0 -0
  166. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/agent/middleware/skill_api_whitelist.py +0 -0
  167. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/agent/middleware/skill_wl_check.py +0 -0
  168. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/agent/middleware/skill_write_guard.py +0 -0
  169. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/agent/reasoning_content_patch.py +0 -0
  170. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/agent/sandbox/__init__.py +0 -0
  171. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/agent/sandbox/consistent_hash.py +0 -0
  172. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/agent/sandbox/minio_sync.py +0 -0
  173. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/agent/sandbox/sandbox_pool.py +0 -0
  174. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/agent/sandbox/sandbox_recovery.py +0 -0
  175. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/agent/sandbox/session.py +0 -0
  176. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/agent/summarization_utils.py +0 -0
  177. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/auth/__init__.py +0 -0
  178. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/auth/ldap_service.py +0 -0
  179. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/auth/oa_cache.py +0 -0
  180. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/auth/oa_crypto.py +0 -0
  181. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/auth/oa_service.py +0 -0
  182. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/auth/wecom_ldap_service.py +0 -0
  183. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/config/ACPAgentConfig.py +0 -0
  184. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/config/Config.py +0 -0
  185. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/config/DatabaseConfig.py +0 -0
  186. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/config/ElasticsearchConfig.py +0 -0
  187. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/config/EmbeddingConfig.py +0 -0
  188. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/config/LLMConfig.py +0 -0
  189. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/config/LangfuseConfig.py +0 -0
  190. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/config/MQConfig.py +0 -0
  191. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/config/PgConfig.py +0 -0
  192. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/config/RedisConfig.py +0 -0
  193. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/config/RerankerConfig.py +0 -0
  194. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/config/SentryConfig.py +0 -0
  195. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/config/SkillApiWhitelistConfig.py +0 -0
  196. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/config/XxlJobConfig.py +0 -0
  197. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/config/__init__.py +0 -0
  198. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/config/config_change_notifier.py +0 -0
  199. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/database/async_base_db_service.py +0 -0
  200. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/database/async_database_service.py +0 -0
  201. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/database/base_db_service.py +0 -0
  202. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/database/database_service.py +0 -0
  203. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/database/elasticsearch_service.py +0 -0
  204. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/database/pg_checkpoint_service.py +0 -0
  205. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/database/redis_service.py +0 -0
  206. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/database/resilient_pg_saver.py +0 -0
  207. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/database/token_usage_db_service.py +0 -0
  208. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/health/__init__.py +0 -0
  209. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/health/health_check.py +0 -0
  210. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/health/metrics.py +0 -0
  211. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/health/ping.py +0 -0
  212. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/heartbeat_process/__init__.py +0 -0
  213. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/heartbeat_process/heartbeat_config.py +0 -0
  214. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/heartbeat_process/heartbeat_process_manager.py +0 -0
  215. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/heartbeat_process/heartbeat_process_worker.py +0 -0
  216. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/llm/__init__.py +0 -0
  217. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/llm/embedding.py +0 -0
  218. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/llm/get_llm.py +0 -0
  219. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/llm/llm_logger.py +0 -0
  220. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/llm/llm_tokens.py +0 -0
  221. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/llm/llm_with_token_tracking.py +0 -0
  222. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/llm/native_with_fallback_runnable.py +0 -0
  223. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/llm/output_fixing_runnable.py +0 -0
  224. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/llm/struct_token.py +0 -0
  225. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/llm/sy_langfuse.py +0 -0
  226. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/llm/tiktoken_cache/9b5ad71b2ce5302211f9c61530b329a4922fc6a4 +0 -0
  227. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/llm/tiktoken_cache/fb374d419588a4632f3f557e76b4b70aebbca790 +0 -0
  228. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/llm/token_usage_es_service.py +0 -0
  229. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/llm/token_usage_mysql_service.py +0 -0
  230. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/llm/token_utils.py +0 -0
  231. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/llm/usage_token.py +0 -0
  232. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/logging/__init__.py +0 -0
  233. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/logging/async_sql_logger.py +0 -0
  234. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/logging/kafka_log.py +0 -0
  235. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/logging/log_masker.py +0 -0
  236. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/logging/logger_levels.py +0 -0
  237. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/logging/logger_wrapper.py +0 -0
  238. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/logging/process_logger.py +0 -0
  239. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/logging/sql_logger.py +0 -0
  240. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/mcp_server/__init__.py +0 -0
  241. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/mcp_server/server.py +0 -0
  242. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/middleware/__init__.py +0 -0
  243. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/middleware/context.py +0 -0
  244. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/middleware/cors.py +0 -0
  245. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/middleware/docs.py +0 -0
  246. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/middleware/exception.py +0 -0
  247. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/middleware/middleware.py +0 -0
  248. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/middleware/monitor_memory.py +0 -0
  249. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/middleware/mq.py +0 -0
  250. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/middleware/timeout.py +0 -0
  251. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/middleware/token_tracking.py +0 -0
  252. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/middleware/tool_result_truncation.py +0 -0
  253. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/middleware/traceid.py +0 -0
  254. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/models/__init__.py +0 -0
  255. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/models/base_http.py +0 -0
  256. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/models/log.py +0 -0
  257. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/models/mcp_server_config.py +0 -0
  258. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/models/mqlistener_config.py +0 -0
  259. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/models/mqmsg_model.py +0 -0
  260. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/models/mqsend_config.py +0 -0
  261. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/models/sso_user.py +0 -0
  262. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/models/token_usage.py +0 -0
  263. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/models/token_usage_mysql.py +0 -0
  264. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/models/xxljob_handler_config.py +0 -0
  265. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/notice/__init__.py +0 -0
  266. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/notice/uvicorn_monitor.py +0 -0
  267. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/notice/wecom_message.py +0 -0
  268. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/rabbitmq/process_pool_consumer.py +0 -0
  269. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/rabbitmq/rabbitmq_client.py +0 -0
  270. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/rabbitmq/rabbitmq_pool.py +0 -0
  271. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/rabbitmq/rabbitmq_service.py +0 -0
  272. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/rabbitmq/rabbitmq_service_client_manager.py +0 -0
  273. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/rabbitmq/rabbitmq_service_connection_monitor.py +0 -0
  274. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/rabbitmq/rabbitmq_service_consumer_manager.py +0 -0
  275. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/rabbitmq/rabbitmq_service_core.py +0 -0
  276. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/rabbitmq/rabbitmq_service_producer_manager.py +0 -0
  277. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/sentry/__init__.py +0 -0
  278. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/sentry/sy_sentry.py +0 -0
  279. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/services.py +0 -0
  280. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/sse/__init__.py +0 -0
  281. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/sse/event.py +0 -0
  282. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/sse/sse.py +0 -0
  283. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/synacos/__init__.py +0 -0
  284. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/synacos/example.py +0 -0
  285. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/synacos/example2.py +0 -0
  286. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/synacos/feign.py +0 -0
  287. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/synacos/feign_client.py +0 -0
  288. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/synacos/nacos_client_base.py +0 -0
  289. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/synacos/nacos_config_manager.py +0 -0
  290. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/synacos/nacos_heartbeat_manager.py +0 -0
  291. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/synacos/nacos_service.py +0 -0
  292. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/synacos/nacos_service_discovery.py +0 -0
  293. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/synacos/nacos_service_registration.py +0 -0
  294. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/synacos/param.py +0 -0
  295. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/tests/deep_agent_server.py +0 -0
  296. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/tests/test_consistent_hash.py +0 -0
  297. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/tests/test_consume_dedup.py +0 -0
  298. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/tests/test_consumer_loss_rootcause.py +0 -0
  299. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/tests/test_consumer_recovery.py +0 -0
  300. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/tests/test_consumer_recovery_fix.py +0 -0
  301. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/tests/test_consumer_tags_sync.py +0 -0
  302. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/tests/test_deep_agent.py +0 -0
  303. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/tests/test_dynamic_max_tokens.py +0 -0
  304. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/tests/test_email.py +0 -0
  305. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/tests/test_encoding_cache.py +0 -0
  306. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/tests/test_exp_concurrent_migrate.py +0 -0
  307. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/tests/test_exp_delete_queue_with_consumers.py +0 -0
  308. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/tests/test_fault_injection_real.py +0 -0
  309. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/tests/test_fix_verification.py +0 -0
  310. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/tests/test_heartbeat_timeout.py +0 -0
  311. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/tests/test_integration_real_broker.py +0 -0
  312. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/tests/test_mcp_server.py +0 -0
  313. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/tests/test_minimax_reasoning.py +0 -0
  314. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/tests/test_mq.py +0 -0
  315. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/tests/test_mq_config_driven.py +0 -0
  316. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/tests/test_oa_login.py +0 -0
  317. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/tests/test_queue_priority_fallback.py +0 -0
  318. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/tests/test_queue_priority_upgrade_timing.py +0 -0
  319. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/tests/test_real_summarization.py +0 -0
  320. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/tests/test_reconnect_scenarios.py +0 -0
  321. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/tests/test_summarization_config.py +0 -0
  322. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/tests/test_summarization_real.py +0 -0
  323. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/tests/test_summary_leak_e2e.py +0 -0
  324. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/tests/test_upgrade_aio_pika.py +0 -0
  325. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/tools/__init__.py +0 -0
  326. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/tools/async_utils.py +0 -0
  327. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/tools/docs.py +0 -0
  328. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/tools/env.py +0 -0
  329. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/tools/merge_headers.py +0 -0
  330. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/tools/snowflake.py +0 -0
  331. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/tools/syemail.py +0 -0
  332. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/tools/timing.py +0 -0
  333. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/xxljob/__init__.py +0 -0
  334. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon/xxljob/xxljob_service.py +0 -0
  335. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon_python_lib.egg-info/dependency_links.txt +0 -0
  336. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon_python_lib.egg-info/entry_points.txt +0 -0
  337. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/src/sycommon_python_lib.egg-info/top_level.txt +0 -0
  338. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/tests/test_acp_tool.py +0 -0
  339. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/tests/test_asyncio_logging.py +0 -0
  340. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/tests/test_config_change_notifier.py +0 -0
  341. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/tests/test_hotreload_snapshot.py +0 -0
  342. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/tests/test_llm_apikey_contextvar.py +0 -0
  343. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/tests/test_log_masker.py +0 -0
  344. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/tests/test_resilient_pg_saver.py +0 -0
  345. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/tests/test_sandbox_path_guard.py +0 -0
  346. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/tests/test_sensitive_guard.py +0 -0
  347. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/tests/test_simple_chat_agent.py +0 -0
  348. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/tests/test_skill_regex_upgrade.py +0 -0
  349. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/tests/test_skill_write_guard.py +0 -0
  350. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/tests/test_sycli.py +0 -0
  351. {sycommon_python_lib-0.2.7a51 → sycommon_python_lib-0.2.7a53}/tests/test_sync_skills_to_sandbox.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: sycommon-python-lib
3
- Version: 0.2.7a51
3
+ Version: 0.2.7a53
4
4
  Summary: Add your description here
5
5
  Requires-Python: >=3.11
6
6
  Description-Content-Type: text/markdown
@@ -9,24 +9,24 @@ Requires-Dist: aiohttp==3.14.3
9
9
  Requires-Dist: aiomysql==0.3.2
10
10
  Requires-Dist: anyio==4.14.2
11
11
  Requires-Dist: decorator==5.3.1
12
- Requires-Dist: deepagents==0.6.12
12
+ Requires-Dist: deepagents==0.7.1
13
13
  Requires-Dist: elasticsearch==9.4.1
14
- Requires-Dist: fastapi==0.139.2
14
+ Requires-Dist: fastapi==0.141.1
15
15
  Requires-Dist: jinja2==3.1.6
16
16
  Requires-Dist: kafka-python==3.0.9
17
17
  Requires-Dist: langchain==1.3.14
18
- Requires-Dist: langchain-core==1.5.1
18
+ Requires-Dist: langchain-core==1.5.3
19
19
  Requires-Dist: langchain-openai==1.4.1
20
- Requires-Dist: langfuse==4.14.1
21
- Requires-Dist: langgraph==1.2.9
22
- Requires-Dist: langgraph-checkpoint-postgres==3.1.0
20
+ Requires-Dist: langfuse==4.14.2
21
+ Requires-Dist: langgraph==1.2.10
22
+ Requires-Dist: langgraph-checkpoint-postgres==3.1.1
23
23
  Requires-Dist: langgraph-checkpoint-redis==0.5.1
24
24
  Requires-Dist: ldap3==2.9.1
25
25
  Requires-Dist: loguru==0.7.3
26
- Requires-Dist: mysql-connector-python==9.7.0
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
- Requires-Dist: pyxxl==0.4.7
29
+ Requires-Dist: pyxxl==0.4.8
30
30
  Requires-Dist: pydantic==2.13.4
31
31
  Requires-Dist: python-dotenv==1.2.2
32
32
  Requires-Dist: python-multipart==0.0.32
@@ -36,14 +36,14 @@ Requires-Dist: sentry-sdk[fastapi]==2.66.1
36
36
  Requires-Dist: sqlalchemy[asyncio]==2.0.51
37
37
  Requires-Dist: starlette[full]==1.3.1
38
38
  Requires-Dist: tiktoken==0.13.0
39
- Requires-Dist: uvicorn==0.51.0
39
+ Requires-Dist: uvicorn==0.52.1
40
40
  Requires-Dist: wecom-aibot-python-sdk==1.0.2
41
- Requires-Dist: twine==6.2.0
41
+ Requires-Dist: twine==7.0.0
42
42
  Requires-Dist: minio==7.2.20
43
- Requires-Dist: langchain-mcp-adapters==0.3.0
43
+ Requires-Dist: langchain-mcp-adapters==0.3.1
44
44
  Requires-Dist: fastapi-mcp==0.4.0
45
45
  Requires-Dist: psycopg[binary,pool]==3.3.4
46
- Requires-Dist: agent-client-protocol==0.11.0
46
+ Requires-Dist: agent-client-protocol==0.12.0
47
47
  Requires-Dist: pypinyin==0.55.0
48
48
 
49
49
  # sycommon-python-lib
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "sycommon-python-lib"
3
- version = "0.2.7a51"
3
+ version = "0.2.7a53"
4
4
  description = "Add your description here"
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.11"
@@ -10,24 +10,24 @@ dependencies = [
10
10
  "aiomysql==0.3.2",
11
11
  "anyio==4.14.2",
12
12
  "decorator==5.3.1",
13
- "deepagents==0.6.12",
13
+ "deepagents==0.7.1",
14
14
  "elasticsearch==9.4.1",
15
- "fastapi==0.139.2",
15
+ "fastapi==0.141.1",
16
16
  "jinja2==3.1.6",
17
17
  "kafka-python==3.0.9",
18
18
  "langchain==1.3.14",
19
- "langchain-core==1.5.1",
19
+ "langchain-core==1.5.3",
20
20
  "langchain-openai==1.4.1",
21
- "langfuse==4.14.1",
22
- "langgraph==1.2.9",
23
- "langgraph-checkpoint-postgres==3.1.0",
21
+ "langfuse==4.14.2",
22
+ "langgraph==1.2.10",
23
+ "langgraph-checkpoint-postgres==3.1.1",
24
24
  "langgraph-checkpoint-redis==0.5.1",
25
25
  "ldap3==2.9.1",
26
26
  "loguru==0.7.3",
27
- "mysql-connector-python==9.7.0",
27
+ "mysql-connector-python==26.7.0",
28
28
  "nacos-sdk-python==2.0.11,<3.0",
29
29
  "psutil==7.2.2",
30
- "pyxxl==0.4.7",
30
+ "pyxxl==0.4.8",
31
31
  "pydantic==2.13.4",
32
32
  "python-dotenv==1.2.2",
33
33
  "python-multipart==0.0.32",
@@ -37,14 +37,14 @@ dependencies = [
37
37
  "sqlalchemy[asyncio]==2.0.51",
38
38
  "starlette[full]==1.3.1",
39
39
  "tiktoken==0.13.0",
40
- "uvicorn==0.51.0",
40
+ "uvicorn==0.52.1",
41
41
  "wecom-aibot-python-sdk==1.0.2",
42
- "twine==6.2.0",
42
+ "twine==7.0.0",
43
43
  "minio==7.2.20",
44
- "langchain-mcp-adapters==0.3.0",
44
+ "langchain-mcp-adapters==0.3.1",
45
45
  "fastapi-mcp==0.4.0",
46
46
  "psycopg[binary,pool]==3.3.4",
47
- "agent-client-protocol==0.11.0",
47
+ "agent-client-protocol==0.12.0",
48
48
  "pypinyin==0.55.0",
49
49
  ]
50
50
 
@@ -60,6 +60,7 @@ from sycommon.middleware.tool_result_truncation import ToolResultTruncationMiddl
60
60
  from sycommon.agent.middleware.skill_write_guard import SkillWriteGuardMiddleware
61
61
  from sycommon.agent.middleware.sandbox_path_guard import SandboxPathGuardMiddleware
62
62
  from sycommon.agent.middleware.sensitive_guard import SensitiveGuardMiddleware
63
+ from sycommon.agent.middleware.model_request_prep import ModelRequestPrepMiddleware
63
64
  from deepagents.middleware.summarization import create_summarization_tool_middleware # noqa: F401 保留 re-export
64
65
  from sycommon.agent.summarization_utils import build_summarization_middleware
65
66
  from sycommon.agent.resume_compactor import maybe_compact_before_resume
@@ -80,265 +81,6 @@ if TYPE_CHECKING:
80
81
  from langchain.agents.middleware.types import AgentState, ContextT, ModelRequest, ModelResponse, ResponseT
81
82
  from langgraph.runtime import Runtime
82
83
 
83
-
84
- def _patch_agent_streaming(agent):
85
- """Monkey-patch factory.py _execute_model_async to fix stream_mode="messages".
86
-
87
- 根因: langchain factory.py (<=1.3.2) 的 _execute_model_async 有两个问题:
88
- 1. 调用 model_.ainvoke(messages) 不传 config → callbacks 不传播
89
- 2. 使用 ainvoke (非流式) 而非 astream → on_llm_new_token 不触发
90
-
91
- 修复: 替换 amodel_node 闭包中的 _execute_model_async, 改用 astream 并传入
92
- 从 ContextVar 读取的 config。astream 每个 token 触发 on_llm_new_token,
93
- StreamMessagesHandler 拦截后推送给 stream_mode="messages" 的消费者。
94
-
95
- 为什么是最内层替换(而非 Middleware): _execute_model_async 位于所有中间件
96
- (含 deepagents tail 的 MemoryMiddleware/FilesystemMiddleware 等会 modify_request
97
- 的 awrap_model_call)的最内层。替换它不绕过任何中间件; 用 Middleware 方案则只能
98
- 插在"用户中间件"层, 会绕过更内层的 MemoryMiddleware 注入。故保留 monkey-patch。
99
-
100
- 加固: 闭包结构按"自由变量名"定位 cell(不依赖固定索引), 任一不符即跳过 patch
101
- 并降级为非流式(功能正常, 只是不逐 token 推送), 而非打错补丁导致静默失效。
102
-
103
- TODO: 等官方修复 (langchain >1.3.x, _execute_model_async 改用 astream) 后
104
- 删除此函数及调用即可。
105
- """
106
- # 已验证兼容的版本范围(超出仅警告, 不阻断 —— 闭包强校验是真正的安全网)
107
- # 1.3.10/1.3.11/1.3.12/1.3.13 + langchain_core 1.4.8/1.4.9 确认闭包结构兼容
108
- # (factory.py 在 1.3.12→1.3.13 逐字节无变化 —— PyPI sdist diff 实证;
109
- # amodel_node freevars 含 _execute_model_async, 内层 freevars 含
110
- # _get_bound_model/_handle_model_output), patch 正常生效。
111
- # 1.3.13 的 _execute_model_async 仍为 ainvoke + 不传 config (factory.py:1467),
112
- # 官方仍未修复, 补丁仍需保留。
113
- _VERIFIED = {"langchain": "1.3.13", "langchain_core": "1.4.9"}
114
- try:
115
- import langchain as _lc
116
- import langchain_core as _lcc
117
- _cur = {"langchain": getattr(_lc, "__version__", "?"),
118
- "langchain_core": getattr(_lcc, "__version__", "?")}
119
- if _cur != _VERIFIED:
120
- SYLogger.warning(
121
- f"[StreamingPatch] langchain 版本 {_cur} 与已验证 {_VERIFIED} 不一致; "
122
- f"闭包强校验仍会兜底, 但建议复核 _execute_model_async 是否已改用 astream")
123
- except Exception:
124
- pass
125
-
126
- try:
127
- from langchain_core.messages import AIMessageChunk as _AIC, AIMessage as _AIM
128
- from langchain_core.runnables.config import var_child_runnable_config
129
-
130
- node = agent.nodes.get("model")
131
- if node is None:
132
- SYLogger.warning(
133
- "[DeepAgent] model node not found, skip streaming patch")
134
- return
135
-
136
- inner = node.node # RunnableSeq
137
- if not hasattr(inner, 'steps') or not inner.steps:
138
- SYLogger.warning(
139
- "[DeepAgent] model node has no steps, skip streaming patch")
140
- return
141
-
142
- # RunnableCallable(trace=False, afunc=amodel_node)
143
- step0 = inner.steps[0]
144
- afunc = getattr(step0, "afunc", None) # amodel_node
145
- if afunc is None or afunc.__closure__ is None:
146
- SYLogger.warning(
147
- "[DeepAgent] amodel_node afunc/closure 缺失, skip streaming patch")
148
- return
149
-
150
- # ---- 按自由变量名定位 cell(不依赖固定索引)----
151
- def _cell_by_name(fn, name):
152
- """从闭包函数 fn 中按 co_freevars 名取出对应 cell 对象(取不到返回 None)。"""
153
- names = fn.__code__.co_freevars
154
- if name not in names or fn.__closure__ is None:
155
- return None
156
- return fn.__closure__[names.index(name)]
157
-
158
- exec_cell = _cell_by_name(afunc, "_execute_model_async")
159
- if exec_cell is None:
160
- SYLogger.warning(
161
- f"[DeepAgent] amodel_node 闭包未含 _execute_model_async "
162
- f"(freevars={afunc.__code__.co_freevars}), skip streaming patch")
163
- return
164
-
165
- original_execute = exec_cell.cell_contents
166
- # 强校验 _execute_model_async 自身的闭包含预期三个自由变量
167
- _gbm_cell = _cell_by_name(original_execute, "_get_bound_model")
168
- _hmo_cell = _cell_by_name(original_execute, "_handle_model_output")
169
- _name_cell = _cell_by_name(original_execute, "name")
170
- if _gbm_cell is None or _hmo_cell is None:
171
- SYLogger.warning(
172
- f"[DeepAgent] _execute_model_async 闭包结构不符 "
173
- f"(freevars={getattr(original_execute, '__code__', None) and original_execute.__code__.co_freevars}), "
174
- f"skip streaming patch(降级为非流式,功能正常)")
175
- return
176
- _get_bound_model = _gbm_cell.cell_contents
177
- _handle_model_output = _hmo_cell.cell_contents
178
- _name = _name_cell.cell_contents if _name_cell is not None else None
179
-
180
- def _clamp_max_tokens_for_model(model_, messages):
181
- """在 raw_model 上执行 _clamp_max_tokens 逻辑。
182
-
183
- 由于 create_deep_agent 提取了 raw_model(绕过了 LLMWithTokenTracking 包装),
184
- 原本在 LLMWithTokenTracking._agenerate 中自动执行的 _clamp_max_tokens 被跳过,
185
- 导致 max_tokens 不随 input tokens 动态调整,当 input + max_output > context_window
186
- 时触发 400 错误。此函数补上这一逻辑。
187
-
188
- 注意:_get_bound_model 返回的可能是 _ChatModelBinding(RunnableBindingBase 子类),
189
- 需要通过 .bound 取到真正的 ChatOpenAI,否则 max_tokens 只设在 wrapper 上不生效。
190
- """
191
- from sycommon.config.LLMConfig import LLMConfig
192
- from sycommon.config.Config import Config
193
- from sycommon.llm.token_utils import clamp_max_tokens
194
- try:
195
- # 解包 binding wrapper,取到真正的 ChatModel
196
- raw_model = getattr(model_, 'bound', model_)
197
- llm_config = Config().get_llm_config(getattr(raw_model, 'model', None))
198
- if not llm_config:
199
- return
200
- llm_cfg = LLMConfig(**llm_config)
201
- max_tokens_limit = getattr(llm_cfg, 'maxTokens', None)
202
- if not max_tokens_limit:
203
- return
204
- max_output = getattr(raw_model, 'max_tokens', None)
205
- if not max_output:
206
- return
207
- dynamic_max = clamp_max_tokens(
208
- raw_model, messages,
209
- context_window=max_tokens_limit,
210
- max_output_tokens=max_output,
211
- )
212
- SYLogger.debug(
213
- f"[StreamingPatch] clamp max_tokens: "
214
- f"context={max_tokens_limit}, max_output={max_output} → {dynamic_max}")
215
- except Exception as e:
216
- SYLogger.warning(
217
- f"[StreamingPatch] clamp max_tokens failed: {e}")
218
-
219
- async def _patched_execute_model_async(request):
220
- """替代 factory._execute_model_async: 用 astream + config 实现流式回调。"""
221
- from langchain.agents.middleware.types import ModelResponse
222
-
223
- SYLogger.warning(
224
- f"[STREAM-DEBUG] _patched_execute_model_async ENTERED | "
225
- f"messages={len(request.messages)} 条 | "
226
- f"has_system={bool(request.system_message)}")
227
- model_, effective_response_format = _get_bound_model(request)
228
- messages = request.messages
229
-
230
- # 🔑 根治摘要泄漏:将 lc_source="summarization" 的 HumanMessage 内容
231
- # 注入到 system_message 而非直接丢弃,保持记忆连续性。
232
- # 根因分析(2026-06-06 端到端测试确认):
233
- # 1. SummarizationMiddleware 将摘要注入为 HumanMessage
234
- # 2. 模型看到 HumanMessage 后容易将其作为对话内容回显/复述
235
- # 3. 之前完全移除摘要导致压缩后模型丢失所有记忆
236
- # 修复策略:提取摘要内容 → 注入 SystemMessage(模型视其为指令/背景知识,
237
- # 回显概率远低于 HumanMessage)→ 从 messages 中移除原始 HumanMessage
238
- _summary_text = None
239
- _filtered_messages = []
240
- for _msg in messages:
241
- if (isinstance(_msg, HumanMessage)
242
- and getattr(_msg, "additional_kwargs", {}).get("lc_source") == "summarization"):
243
- _raw = _msg.content or ""
244
- # 去掉 <internal_context_data> 包装标签,提取纯摘要
245
- _summary_text = re.sub(
246
- r'</?internal_context_data>', '', _raw, flags=re.DOTALL
247
- ).strip()
248
- SYLogger.debug(
249
- "[DeepAgent] 摘要已从 HumanMessage 提取,将注入 system_message")
250
- else:
251
- _filtered_messages.append(_msg)
252
- messages = _filtered_messages
253
-
254
- if _summary_text and request.system_message:
255
- from deepagents.middleware._utils import append_to_system_message
256
- _summary_directive = (
257
- "\n\n<system_context>\n"
258
- "以下是之前对话历史的压缩摘要,作为你的内部记忆使用。"
259
- "把它当作你自己的回忆,绝对不要在回复中重复、复述或引用此内容的任何部分。\n"
260
- f"{_summary_text}\n"
261
- "</system_context>"
262
- )
263
- _new_sys = append_to_system_message(
264
- request.system_message, _summary_directive)
265
- request = request.override(system_message=_new_sys)
266
-
267
- if request.system_message:
268
- messages = [request.system_message, *messages]
269
-
270
- # 动态调整 max_tokens,防止 input + max_output 超过上下文窗口
271
- _clamp_max_tokens_for_model(model_, messages)
272
-
273
- # 从 ContextVar 读取 LangGraph 注入的 config(含 StreamMessagesHandler)
274
- config = var_child_runnable_config.get()
275
-
276
- # 用 astream 替代 ainvoke, 每个 token 规发 on_llm_new_token
277
- # 注意: ChatModel.astream() 产出的是 AIMessageChunk(BaseMessageChunk),
278
- # 不是 ChatGenerationChunk,因此累加结果直接就是消息本身,没有 .message 属性。
279
- import time as _t
280
- _t0 = _t.monotonic()
281
- _msg_count = len(messages) if hasattr(messages, '__len__') else -1
282
- SYLogger.info(
283
- f"[LLM-CALL] astream 开始: model={getattr(model_, 'model', '?')}, "
284
- f"messages={_msg_count} 条")
285
- chunks: list = []
286
- _first_chunk_at = None
287
- async for chunk in model_.astream(messages, config=config):
288
- if _first_chunk_at is None:
289
- _first_chunk_at = _t.monotonic()
290
- SYLogger.info(
291
- f"[LLM-CALL] 首个 chunk 到达, 耗时 {_first_chunk_at - _t0:.2f}s")
292
- chunks.append(chunk)
293
-
294
- if not chunks:
295
- # astream 无产出时降级到原始 ainvoke(不走流式)
296
- SYLogger.warning(
297
- "[StreamingPatch] astream returned empty, fallback to ainvoke")
298
- output = await model_.ainvoke(messages, config=config)
299
- else:
300
- SYLogger.info(
301
- f"[LLM-CALL] astream 结束, 共 {len(chunks)} 个 chunk, "
302
- f"总耗时 {_t.monotonic() - _t0:.2f}s")
303
- generation = chunks[0]
304
- for c in chunks[1:]:
305
- generation += c
306
- # astream 累加结果可能是 AIMessageChunk(多数情况)或包裹了 .message 的
307
- # ChatGenerationChunk(少数自定义模型)。两种都兼容。
308
- ai_message = getattr(generation, "message", generation)
309
- if isinstance(ai_message, _AIC):
310
- ai_message = _AIM(
311
- content=ai_message.content,
312
- additional_kwargs=ai_message.additional_kwargs,
313
- tool_calls=ai_message.tool_calls,
314
- usage_metadata=getattr(
315
- ai_message, "usage_metadata", None),
316
- response_metadata=getattr(
317
- ai_message, "response_metadata", {}),
318
- id=ai_message.id,
319
- )
320
- output = ai_message
321
-
322
- if _name:
323
- output.name = _name
324
-
325
- handled_output = _handle_model_output(
326
- output, effective_response_format)
327
- return ModelResponse(
328
- result=handled_output["messages"],
329
- structured_response=handled_output.get("structured_response"),
330
- )
331
-
332
- # 替换闭包 cell → amodel_node 调用 patched 版本
333
- exec_cell.cell_contents = _patched_execute_model_async
334
- SYLogger.info(
335
- f"[DeepAgent] _execute_model_async patched (astream + config) "
336
- f"| langchain={_cur.get('langchain')} core={_cur.get('langchain_core')}")
337
-
338
- except Exception as e:
339
- SYLogger.warning(f"[DeepAgent] streaming patch failed: {e}")
340
-
341
-
342
84
  @tool
343
85
  def get_current_date() -> str:
344
86
  """获取当前日期时间"""
@@ -410,6 +152,13 @@ class AgentConfig(BaseModel):
410
152
  scoped_skills_dir: Optional[str] = None
411
153
  # 沙箱挂载点 scope,如 "shengye-platform/oa"。仅当 scoped_skills_dir 非空时生效。
412
154
  scoped_skills_scope: Optional[str] = None
155
+ # 技能 ACL 白名单(仅 system 技能)。None=不过滤(向后兼容/平台 RPC/管理员);
156
+ # 非 None 时 _sync_skills_to_sandbox 只同步集合内的技能,并删除沙箱里
157
+ # 已存在但不在集合内的 system 技能(撤销已授权过的技能——沙箱 per-user 跨
158
+ # 会话持久,撤销必须主动删,否则 SkillsMiddleware 仍能 ls 到)。由应用层根据
159
+ # 数字员工 ACL 规则解析后注入。scoped/user 技能不受此字段约束
160
+ # (scoped 由服务端路由硬编码,user 由 MinIO 按 user 灌入)。
161
+ system_skills_allow: Optional[set[str]] = None
413
162
  memory_dir: Optional[str] = None
414
163
 
415
164
  @property
@@ -1280,11 +1029,11 @@ async def create_deep_agent(
1280
1029
  )
1281
1030
 
1282
1031
  # 🔑 提取底层 ChatOpenAI 原始模型
1283
- # LLMWithTokenTracking 重写了 _agenerate(非流式路径),
1284
- # 导致 ainvoke 不走 astream 路径。
1285
- # 本文件的 _patch_agent_streaming() 会替换模型节点的 _execute_model_async,
1286
- # 改用 model.astream() 触发流式回调;提取 raw_model 确保 astream / bind_tools
1287
- # 等方法在原始 ChatOpenAI 上工作,而不是被 LLMWithTokenTracking 的包装拦截。
1032
+ # deepagents/langchain factory 需要 BaseChatModel 才能 bind_tools(结构化输出 /
1033
+ # 工具调用),而 LLMWithTokenTracking 不是 BaseChatModel 子类(缺 bind_tools 等),
1034
+ # 故提取 raw_model。streaming=True langchain-core 的 _should_stream 更早命中,
1035
+ # 配合 StreamMessagesHandler(_StreamingCallbackHandler)实现隐式逐 token 流式
1036
+ # (langchain-core >= 1.5.3,无需手动 patch _execute_model_async)。
1288
1037
  raw_model = getattr(model, 'llm', model)
1289
1038
  if raw_model is not model:
1290
1039
  print(
@@ -1322,9 +1071,11 @@ async def create_deep_agent(
1322
1071
  # 每次 create_agent(新会话首回合)跑一遍:版本没变时开销仅为 1+N 次元数据小读取。
1323
1072
  if config.system_skills_dir and sandbox_backend:
1324
1073
  await _sync_skills_to_sandbox(config.system_skills_dir, sandbox_backend,
1325
- sandbox_dest="/skills/system", chmod_readonly=True)
1074
+ sandbox_dest="/skills/system", chmod_readonly=True,
1075
+ allow_skills=config.system_skills_allow)
1326
1076
 
1327
1077
  # 同步接口专属技能到沙箱(只读)。与 system 同一套 version 感知增量同步机制。
1078
+ # scoped 技能由服务端路由硬编码(scope),前端不可改,不在技能 ACL 范围,不传 allow_skills。
1328
1079
  if config.scoped_skills_dir and config.scoped_skills_scope and sandbox_backend:
1329
1080
  await _sync_skills_to_sandbox(config.scoped_skills_dir, sandbox_backend,
1330
1081
  sandbox_dest=scoped_path, chmod_readonly=True)
@@ -1363,6 +1114,7 @@ async def create_deep_agent(
1363
1114
  ToolResultTruncationMiddleware(),
1364
1115
  TokenTrackingMiddleware(model_name=config.model_name, user_id=user_id),
1365
1116
  summarization_mw,
1117
+ ModelRequestPrepMiddleware(), # 紧跟 summarization:摘要重定位 + 动态压 max_tokens
1366
1118
  SkillWriteGuardMiddleware(), # 系统 /skills/system 只读守卫(先于白名单)
1367
1119
  SandboxPathGuardMiddleware(user_id), # 宿主绝对路径规范化/拦截(防越权读他人沙箱文件)
1368
1120
  ]
@@ -1441,10 +1193,6 @@ async def create_deep_agent(
1441
1193
  except Exception:
1442
1194
  pass
1443
1195
 
1444
- # 🔑 Patch _execute_model_async: 将 ainvoke 替换为 astream + config
1445
- # 修复 stream_mode="messages" 只返回 1 chunk 的问题
1446
- _patch_agent_streaming(agent)
1447
-
1448
1196
  recovery_manager = SandboxRecoveryManager(sandbox_backend)
1449
1197
 
1450
1198
  return DeepAgent(
@@ -1556,6 +1304,7 @@ async def _sync_skills_to_sandbox(
1556
1304
  *,
1557
1305
  sandbox_dest: str = "/skills",
1558
1306
  chmod_readonly: bool = False,
1307
+ allow_skills: Optional[set[str]] = None,
1559
1308
  ) -> None:
1560
1309
  """同步技能目录到沙箱(按版本检查,版本不一致则全量覆盖)
1561
1310
 
@@ -1564,6 +1313,11 @@ async def _sync_skills_to_sandbox(
1564
1313
  - 沙箱有该技能且 version 一致 → 跳过
1565
1314
  - 沙箱没有 / 版本不一致 → 从本地 skills/ 全量上传到沙箱
1566
1315
 
1316
+ 技能 ACL(allow_skills): None=不过滤(向后兼容/管理员/平台 RPC)。
1317
+ 非 None 时:(1) 枚举本地技能阶段跳过不在白名单的;(2) 删除沙箱里已存在
1318
+ 但本次不在白名单的技能(撤销 enforcement——沙箱 per-user 跨会话持久,
1319
+ 管理员在两次会话间撤销授权时必须主动删,否则 SkillsMiddleware 仍能 ls 到)。
1320
+
1567
1321
  性能: 比对与上传均绕过 backend 的懒同步(_skip_lazy_sync=True),
1568
1322
  避免「比对 read SKILL.md 前先整目录上传」「删除前先上传再删」的往返浪费。
1569
1323
  多技能的 SKILL.md 比对用 gather 并发; batch_upload 服务端无条件覆盖,
@@ -1579,6 +1333,9 @@ async def _sync_skills_to_sandbox(
1579
1333
  src = os.path.join(skills_dir, skill_name)
1580
1334
  if not os.path.isdir(src):
1581
1335
  continue
1336
+ # 技能 ACL:不在白名单的技能既不同步也不留痕(仅在 allow_skills 非 None 时)
1337
+ if allow_skills is not None and skill_name not in allow_skills:
1338
+ continue
1582
1339
  local_version = ""
1583
1340
  local_skill_md = os.path.join(src, "SKILL.md")
1584
1341
  if os.path.isfile(local_skill_md):
@@ -1597,6 +1354,39 @@ async def _sync_skills_to_sandbox(
1597
1354
  if child.is_dir:
1598
1355
  existing_dirs.add(child.name)
1599
1356
 
1357
+ # 技能 ACL 撤销 enforcement:删除沙箱里已存在但本次不在白名单的技能。
1358
+ # 沙箱 per-user 跨会话持久,管理员在两次会话间撤销授权时,必须主动删除
1359
+ # 上一会话同步进来的技能,否则 SkillsMiddleware 仍能 ls 到 → agent 仍可调用,
1360
+ # 违反"代码层强制、不信 agent 自控"。allow_skills 为 None 时跳过(无 ACL)。
1361
+ if allow_skills is not None:
1362
+ for stale in sorted(existing_dirs - allow_skills):
1363
+ revoked = False
1364
+ for _attempt in range(2): # 最多重试一次,与版本不一致删除分支一致
1365
+ try:
1366
+ await backend.adelete(
1367
+ f"{sandbox_dest}/{stale}",
1368
+ recursive=True,
1369
+ _skip_lazy_sync=True)
1370
+ revoked = True
1371
+ break
1372
+ except Exception as e:
1373
+ SYLogger.warning(
1374
+ f"[DeepAgent] ACL 撤销删除失败(尝试{_attempt+1}): "
1375
+ f"{stale}, {e}")
1376
+ if revoked:
1377
+ SYLogger.info(
1378
+ f"[DeepAgent] ACL 撤销:删除沙箱未授权技能 {stale} "
1379
+ f"@{sandbox_dest}")
1380
+ else:
1381
+ SYLogger.error(
1382
+ f"[DeepAgent] ACL 撤销彻底失败,本次跳过: {stale}")
1383
+ # 清懒同步缓存:_sync_skills_to_sandbox 用 plain skill_name 作 key,
1384
+ # _lazy_sync_skill_from_path 用 "{scope}/{skill_name}",两种都清。
1385
+ # sandbox_dest 形如 /skills/system,scope 取其最后一段。
1386
+ scope = sandbox_dest.rsplit("/", 1)[-1]
1387
+ backend._synced_skills.discard(stale)
1388
+ backend._synced_skills.discard(f"{scope}/{stale}")
1389
+
1600
1390
  # 并发读取所有已存在技能的沙箱 SKILL.md 比对版本(跳过懒同步)
1601
1391
  async def _read_remote_version(skill_name: str) -> str:
1602
1392
  if skill_name not in existing_dirs:
@@ -1624,6 +1414,19 @@ async def _sync_skills_to_sandbox(
1624
1414
  name: rv for (name, _, _), rv in zip(local_skills, remote_versions)
1625
1415
  }
1626
1416
 
1417
+ # 并发预校验正文新鲜度:仅对「版本一致」的技能做。版本不一致/无版本的
1418
+ # 直接当 stale,不进校验。历史上这一步是写在下方 for 循环里逐个 await 的,
1419
+ # 多技能场景退化为串行(N 次 aread = N × RTT)。校验互相独立,gather 即可。
1420
+ version_match_skills = [
1421
+ (name, src) for name, ver, src in local_skills
1422
+ if remote_version_map.get(name, "") and remote_version_map[name] == ver
1423
+ ]
1424
+ fresh_results = await asyncio.gather(
1425
+ *[_verify_skill_content_fresh(backend, sandbox_dest, name, src)
1426
+ for name, src in version_match_skills]
1427
+ )
1428
+ fresh_map = dict(zip([n for n, _ in version_match_skills], fresh_results))
1429
+
1627
1430
  skill_count = 0
1628
1431
  skip_count = 0
1629
1432
  for skill_name, local_version, src in local_skills:
@@ -1633,9 +1436,8 @@ async def _sync_skills_to_sandbox(
1633
1436
  # 版本一致仍校验正文关键内容,防止"version 字段已更新但正文未同步"
1634
1437
  # (历史上出现过沙箱 SKILL.md 版本号新、正文旧的脏数据,导致 agent
1635
1438
  # 永远读不到新版指令)。校验失败则强制走删除+重传。
1636
- if not await _verify_skill_content_fresh(
1637
- backend, sandbox_dest, skill_name, src
1638
- ):
1439
+ # fresh_map 在进入循环前已并发预取,这里只查表不再 await
1440
+ if not fresh_map.get(skill_name, False):
1639
1441
  SYLogger.warning(
1640
1442
  f"[DeepAgent] 技能版本一致但正文不一致,强制重传: {skill_name} "
1641
1443
  f"v{local_version}")
@@ -1729,6 +1531,9 @@ async def _create_sandbox_backend(
1729
1531
  sync_dirs=sync_dirs,
1730
1532
  auto_sync=True,
1731
1533
  skills_dir=skills_dir_for_backend,
1534
+ # 技能 ACL 白名单透传给沙箱后端:execute 命令引用被撤销技能的路径时,
1535
+ # _lazy_sync_skill_from_path 会用它拦截重新上传,关闭撤销残留缺口。
1536
+ skills_allow=config.system_skills_allow,
1732
1537
  )
1733
1538
 
1734
1539
  try: