sycommon-python-lib 0.2.5a25__tar.gz → 0.2.5a27__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 (294) hide show
  1. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/PKG-INFO +2 -2
  2. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/pyproject.toml +7 -2
  3. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/sycommon/agent/chat_events.py +36 -0
  4. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/sycommon/agent/deep_agent.py +51 -6
  5. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/sycommon/agent/sandbox/file_ops.py +12 -2
  6. sycommon_python_lib-0.2.5a27/src/sycommon/database/async_base_db_service.py +114 -0
  7. sycommon_python_lib-0.2.5a27/src/sycommon/database/base_db_service.py +114 -0
  8. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/sycommon/llm/llm_with_token_tracking.py +0 -9
  9. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/sycommon/logging/kafka_log.py +58 -0
  10. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/sycommon/models/mqlistener_config.py +1 -1
  11. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/sycommon/rabbitmq/rabbitmq_client.py +1 -1
  12. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/sycommon/services.py +8 -0
  13. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/sycommon_python_lib.egg-info/PKG-INFO +2 -2
  14. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/sycommon_python_lib.egg-info/SOURCES.txt +1 -0
  15. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/sycommon_python_lib.egg-info/requires.txt +1 -1
  16. sycommon_python_lib-0.2.5a27/tests/test_asyncio_logging.py +116 -0
  17. sycommon_python_lib-0.2.5a25/src/sycommon/database/async_base_db_service.py +0 -36
  18. sycommon_python_lib-0.2.5a25/src/sycommon/database/base_db_service.py +0 -30
  19. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/README.md +0 -0
  20. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/setup.cfg +0 -0
  21. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/command/__init__.py +0 -0
  22. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/command/cli.py +0 -0
  23. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/command/core/__init__.py +0 -0
  24. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/command/core/console.py +0 -0
  25. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/command/core/models.py +0 -0
  26. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/command/core/project.py +0 -0
  27. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/command/core/utils.py +0 -0
  28. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/command/templates/__init__.py +0 -0
  29. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/command/templates/agent/README.md.tpl +0 -0
  30. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/command/templates/agent/__init__.py +0 -0
  31. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/command/templates/agent/agent/__init__.py.tpl +0 -0
  32. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/command/templates/agent/agent/main_agent.py.tpl +0 -0
  33. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/command/templates/agent/agent/nodes/__init__.py.tpl +0 -0
  34. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/command/templates/agent/agent/nodes/example_node.py.tpl +0 -0
  35. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/command/templates/agent/agent/states/__init__.py.tpl +0 -0
  36. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/command/templates/agent/agent/states/agent_state.py.tpl +0 -0
  37. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/command/templates/agent/api/__init__.py.tpl +0 -0
  38. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/command/templates/agent/api/query.py.tpl +0 -0
  39. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/command/templates/agent/api/sse/__init__.py.tpl +0 -0
  40. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/command/templates/agent/api/sse/agent.py.tpl +0 -0
  41. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/command/templates/agent/app.py.tpl +0 -0
  42. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/command/templates/agent/client/__init__.py.tpl +0 -0
  43. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/command/templates/agent/db/__init__.py.tpl +0 -0
  44. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/command/templates/agent/db/model/__init__.py.tpl +0 -0
  45. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/command/templates/agent/db/model/entity.py.tpl +0 -0
  46. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/command/templates/agent/db/service.py.tpl +0 -0
  47. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/command/templates/agent/model/__init__.py.tpl +0 -0
  48. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/command/templates/agent/model/parse.py.tpl +0 -0
  49. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/command/templates/agent/tools/__init__.py.tpl +0 -0
  50. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/command/templates/agent/tools/mq.py.tpl +0 -0
  51. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/command/templates/base/.env.tpl +0 -0
  52. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/command/templates/base/.gitignore.tpl +0 -0
  53. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/command/templates/base/Dockerfile.tpl +0 -0
  54. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/command/templates/base/README.md.tpl +0 -0
  55. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/command/templates/base/__init__.py +0 -0
  56. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/command/templates/base/app.py.tpl +0 -0
  57. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/command/templates/base/app.yaml.tpl +0 -0
  58. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/command/templates/base/client/FileServiceClient.py.tpl +0 -0
  59. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/command/templates/base/client/__init__.py.tpl +0 -0
  60. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/command/templates/base/model/__init__.py.tpl +0 -0
  61. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/command/templates/base/model/file_info.py.tpl +0 -0
  62. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/command/templates/base/requirements.txt.tpl +0 -0
  63. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/command/templates/cli/README.md.tpl +0 -0
  64. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/command/templates/cli/__init__.py +0 -0
  65. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/command/templates/cli/app.py.tpl +0 -0
  66. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/command/templates/cli/commands/__init__.py.tpl +0 -0
  67. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/command/templates/cli/commands/hello.py.tpl +0 -0
  68. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/command/templates/cli/pyproject.toml.tpl +0 -0
  69. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/command/templates/cli/tools/__init__.py.tpl +0 -0
  70. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/command/templates/web/README.md.tpl +0 -0
  71. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/command/templates/web/__init__.py +0 -0
  72. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/command/templates/web/api/__init__.py.tpl +0 -0
  73. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/command/templates/web/api/echo.py.tpl +0 -0
  74. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/command/templates/web/api/sse/__init__.py.tpl +0 -0
  75. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/command/templates/web/api/sse/echo.py.tpl +0 -0
  76. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/command/templates/web/app.py.tpl +0 -0
  77. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/command/templates/web/client/__init__.py.tpl +0 -0
  78. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/command/templates/web/model/__init__.py.tpl +0 -0
  79. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/command/templates/web/tools/__init__.py.tpl +0 -0
  80. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/command/templates/web/tools/mq.py.tpl +0 -0
  81. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/nexus/__init__.py +0 -0
  82. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/sycli/__init__.py +0 -0
  83. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/sycli/__main__.py +0 -0
  84. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/sycli/agents/__init__.py +0 -0
  85. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/sycli/agents/factory.py +0 -0
  86. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/sycli/agents/prompts.py +0 -0
  87. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/sycli/cdp/__init__.py +0 -0
  88. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/sycli/cdp/browser.py +0 -0
  89. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/sycli/cdp/capabilities/__init__.py +0 -0
  90. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/sycli/cdp/capabilities/console.py +0 -0
  91. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/sycli/cdp/capabilities/dom.py +0 -0
  92. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/sycli/cdp/capabilities/network.py +0 -0
  93. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/sycli/cdp/capabilities/page_errors.py +0 -0
  94. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/sycli/cdp/capabilities/performance.py +0 -0
  95. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/sycli/cdp/capabilities/screenshot.py +0 -0
  96. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/sycli/cdp/client.py +0 -0
  97. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/sycli/cdp/protocol.py +0 -0
  98. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/sycli/cdp/repl.py +0 -0
  99. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/sycli/cli.py +0 -0
  100. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/sycli/commands/__init__.py +0 -0
  101. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/sycli/commands/cdp_cmd.py +0 -0
  102. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/sycli/commands/chat_cmd.py +0 -0
  103. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/sycli/commands/create_cmd.py +0 -0
  104. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/sycli/commands/evaluate_cmd.py +0 -0
  105. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/sycli/commands/init_cmd.py +0 -0
  106. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/sycli/commands/memory_cmd.py +0 -0
  107. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/sycli/commands/resume_cmd.py +0 -0
  108. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/sycli/commands/rollback_cmd.py +0 -0
  109. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/sycli/commands/run_cmd.py +0 -0
  110. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/sycli/core/__init__.py +0 -0
  111. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/sycli/core/backend.py +0 -0
  112. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/sycli/core/config.py +0 -0
  113. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/sycli/core/display.py +0 -0
  114. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/sycli/core/git_integration.py +0 -0
  115. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/sycli/core/llm.py +0 -0
  116. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/sycli/core/state.py +0 -0
  117. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/sycli/evaluate/__init__.py +0 -0
  118. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/sycli/evaluate/api_evaluator.py +0 -0
  119. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/sycli/memory/__init__.py +0 -0
  120. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/sycli/memory/compressor.py +0 -0
  121. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/sycli/memory/full.py +0 -0
  122. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/sycli/memory/hot.py +0 -0
  123. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/sycli/memory/manager.py +0 -0
  124. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/sycli/memory/warm.py +0 -0
  125. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/sycli/mode/__init__.py +0 -0
  126. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/sycli/mode/create.py +0 -0
  127. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/sycli/mode/optimize.py +0 -0
  128. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/sycli/models/__init__.py +0 -0
  129. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/sycli/models/config_models.py +0 -0
  130. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/sycli/rl/__init__.py +0 -0
  131. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/sycli/rl/baseline_tests.py +0 -0
  132. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/sycli/rl/checkpoint.py +0 -0
  133. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/sycli/rl/convergence.py +0 -0
  134. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/sycli/rl/diagnosis.py +0 -0
  135. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/sycli/rl/engine.py +0 -0
  136. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/sycli/rl/environment.py +0 -0
  137. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/sycli/rl/experience.py +0 -0
  138. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/sycli/rl/harness_prompts.py +0 -0
  139. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/sycli/rl/history.py +0 -0
  140. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/sycli/rl/optimization_logger.py +0 -0
  141. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/sycli/rl/pre_validation.py +0 -0
  142. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/sycli/rl/reward.py +0 -0
  143. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/sycli/rl/strategy_bandit.py +0 -0
  144. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/sycli/rl/strategy_generator.py +0 -0
  145. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/sycli/rl/strategy_prompts.py +0 -0
  146. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/sycli/skills/__init__.py +0 -0
  147. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/sycommon/__init__.py +0 -0
  148. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/sycommon/agent/__init__.py +0 -0
  149. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/sycommon/agent/agent_manager.py +0 -0
  150. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/sycommon/agent/mcp/__init__.py +0 -0
  151. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/sycommon/agent/mcp/models.py +0 -0
  152. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/sycommon/agent/mcp/tool_loader.py +0 -0
  153. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/sycommon/agent/multi_agent_team.py +0 -0
  154. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/sycommon/agent/sandbox/__init__.py +0 -0
  155. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/sycommon/agent/sandbox/http_sandbox_backend.py +0 -0
  156. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/sycommon/agent/sandbox/minio_sync.py +0 -0
  157. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/sycommon/agent/sandbox/sandbox_pool.py +0 -0
  158. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/sycommon/agent/sandbox/sandbox_recovery.py +0 -0
  159. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/sycommon/agent/sandbox/session.py +0 -0
  160. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/sycommon/agent/summarization_utils.py +0 -0
  161. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/sycommon/auth/__init__.py +0 -0
  162. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/sycommon/auth/ldap_service.py +0 -0
  163. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/sycommon/auth/oa_cache.py +0 -0
  164. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/sycommon/auth/oa_crypto.py +0 -0
  165. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/sycommon/auth/oa_service.py +0 -0
  166. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/sycommon/auth/wecom_ldap_service.py +0 -0
  167. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/sycommon/config/Config.py +0 -0
  168. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/sycommon/config/DatabaseConfig.py +0 -0
  169. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/sycommon/config/ElasticsearchConfig.py +0 -0
  170. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/sycommon/config/EmbeddingConfig.py +0 -0
  171. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/sycommon/config/LLMConfig.py +0 -0
  172. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/sycommon/config/LangfuseConfig.py +0 -0
  173. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/sycommon/config/MQConfig.py +0 -0
  174. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/sycommon/config/PgConfig.py +0 -0
  175. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/sycommon/config/RedisConfig.py +0 -0
  176. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/sycommon/config/RerankerConfig.py +0 -0
  177. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/sycommon/config/SentryConfig.py +0 -0
  178. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/sycommon/config/XxlJobConfig.py +0 -0
  179. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/sycommon/config/__init__.py +0 -0
  180. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/sycommon/database/async_database_service.py +0 -0
  181. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/sycommon/database/database_service.py +0 -0
  182. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/sycommon/database/elasticsearch_service.py +0 -0
  183. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/sycommon/database/pg_checkpoint_service.py +0 -0
  184. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/sycommon/database/redis_service.py +0 -0
  185. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/sycommon/database/token_usage_db_service.py +0 -0
  186. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/sycommon/health/__init__.py +0 -0
  187. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/sycommon/health/health_check.py +0 -0
  188. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/sycommon/health/metrics.py +0 -0
  189. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/sycommon/health/ping.py +0 -0
  190. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/sycommon/heartbeat_process/__init__.py +0 -0
  191. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/sycommon/heartbeat_process/heartbeat_config.py +0 -0
  192. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/sycommon/heartbeat_process/heartbeat_process_manager.py +0 -0
  193. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/sycommon/heartbeat_process/heartbeat_process_worker.py +0 -0
  194. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/sycommon/llm/__init__.py +0 -0
  195. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/sycommon/llm/embedding.py +0 -0
  196. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/sycommon/llm/get_llm.py +0 -0
  197. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/sycommon/llm/llm_logger.py +0 -0
  198. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/sycommon/llm/llm_tokens.py +0 -0
  199. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/sycommon/llm/native_with_fallback_runnable.py +0 -0
  200. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/sycommon/llm/output_fixing_runnable.py +0 -0
  201. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/sycommon/llm/struct_token.py +0 -0
  202. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/sycommon/llm/sy_langfuse.py +0 -0
  203. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/sycommon/llm/tiktoken_cache/9b5ad71b2ce5302211f9c61530b329a4922fc6a4 +0 -0
  204. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/sycommon/llm/tiktoken_cache/fb374d419588a4632f3f557e76b4b70aebbca790 +0 -0
  205. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/sycommon/llm/token_usage_es_service.py +0 -0
  206. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/sycommon/llm/token_usage_mysql_service.py +0 -0
  207. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/sycommon/llm/usage_token.py +0 -0
  208. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/sycommon/logging/__init__.py +0 -0
  209. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/sycommon/logging/async_sql_logger.py +0 -0
  210. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/sycommon/logging/logger_levels.py +0 -0
  211. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/sycommon/logging/logger_wrapper.py +0 -0
  212. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/sycommon/logging/process_logger.py +0 -0
  213. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/sycommon/logging/sql_logger.py +0 -0
  214. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/sycommon/mcp_server/__init__.py +0 -0
  215. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/sycommon/mcp_server/server.py +0 -0
  216. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/sycommon/middleware/__init__.py +0 -0
  217. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/sycommon/middleware/context.py +0 -0
  218. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/sycommon/middleware/cors.py +0 -0
  219. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/sycommon/middleware/docs.py +0 -0
  220. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/sycommon/middleware/exception.py +0 -0
  221. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/sycommon/middleware/middleware.py +0 -0
  222. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/sycommon/middleware/monitor_memory.py +0 -0
  223. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/sycommon/middleware/mq.py +0 -0
  224. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/sycommon/middleware/sandbox.py +0 -0
  225. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/sycommon/middleware/timeout.py +0 -0
  226. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/sycommon/middleware/token_tracking.py +0 -0
  227. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/sycommon/middleware/tool_result_truncation.py +0 -0
  228. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/sycommon/middleware/traceid.py +0 -0
  229. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/sycommon/models/__init__.py +0 -0
  230. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/sycommon/models/base_http.py +0 -0
  231. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/sycommon/models/log.py +0 -0
  232. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/sycommon/models/mcp_server_config.py +0 -0
  233. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/sycommon/models/mqmsg_model.py +0 -0
  234. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/sycommon/models/mqsend_config.py +0 -0
  235. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/sycommon/models/sandbox.py +0 -0
  236. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/sycommon/models/sso_user.py +0 -0
  237. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/sycommon/models/token_usage.py +0 -0
  238. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/sycommon/models/token_usage_mysql.py +0 -0
  239. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/sycommon/models/xxljob_handler_config.py +0 -0
  240. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/sycommon/notice/__init__.py +0 -0
  241. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/sycommon/notice/uvicorn_monitor.py +0 -0
  242. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/sycommon/notice/wecom_message.py +0 -0
  243. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/sycommon/rabbitmq/process_pool_consumer.py +0 -0
  244. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/sycommon/rabbitmq/rabbitmq_pool.py +0 -0
  245. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/sycommon/rabbitmq/rabbitmq_service.py +0 -0
  246. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/sycommon/rabbitmq/rabbitmq_service_client_manager.py +0 -0
  247. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/sycommon/rabbitmq/rabbitmq_service_connection_monitor.py +0 -0
  248. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/sycommon/rabbitmq/rabbitmq_service_consumer_manager.py +0 -0
  249. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/sycommon/rabbitmq/rabbitmq_service_core.py +0 -0
  250. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/sycommon/rabbitmq/rabbitmq_service_producer_manager.py +0 -0
  251. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/sycommon/sentry/__init__.py +0 -0
  252. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/sycommon/sentry/sy_sentry.py +0 -0
  253. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/sycommon/sse/__init__.py +0 -0
  254. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/sycommon/sse/event.py +0 -0
  255. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/sycommon/sse/sse.py +0 -0
  256. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/sycommon/synacos/__init__.py +0 -0
  257. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/sycommon/synacos/example.py +0 -0
  258. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/sycommon/synacos/example2.py +0 -0
  259. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/sycommon/synacos/feign.py +0 -0
  260. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/sycommon/synacos/feign_client.py +0 -0
  261. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/sycommon/synacos/nacos_client_base.py +0 -0
  262. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/sycommon/synacos/nacos_config_manager.py +0 -0
  263. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/sycommon/synacos/nacos_heartbeat_manager.py +0 -0
  264. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/sycommon/synacos/nacos_service.py +0 -0
  265. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/sycommon/synacos/nacos_service_discovery.py +0 -0
  266. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/sycommon/synacos/nacos_service_registration.py +0 -0
  267. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/sycommon/synacos/param.py +0 -0
  268. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/sycommon/tests/deep_agent_server.py +0 -0
  269. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/sycommon/tests/test_consumer_recovery.py +0 -0
  270. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/sycommon/tests/test_deep_agent.py +0 -0
  271. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/sycommon/tests/test_dynamic_max_tokens.py +0 -0
  272. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/sycommon/tests/test_email.py +0 -0
  273. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/sycommon/tests/test_encoding_cache.py +0 -0
  274. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/sycommon/tests/test_mcp_server.py +0 -0
  275. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/sycommon/tests/test_minimax_reasoning.py +0 -0
  276. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/sycommon/tests/test_mq.py +0 -0
  277. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/sycommon/tests/test_oa_login.py +0 -0
  278. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/sycommon/tests/test_real_summarization.py +0 -0
  279. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/sycommon/tests/test_summarization_config.py +0 -0
  280. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/sycommon/tests/test_summarization_real.py +0 -0
  281. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/sycommon/tools/__init__.py +0 -0
  282. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/sycommon/tools/async_utils.py +0 -0
  283. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/sycommon/tools/docs.py +0 -0
  284. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/sycommon/tools/env.py +0 -0
  285. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/sycommon/tools/merge_headers.py +0 -0
  286. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/sycommon/tools/snowflake.py +0 -0
  287. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/sycommon/tools/syemail.py +0 -0
  288. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/sycommon/tools/timing.py +0 -0
  289. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/sycommon/xxljob/__init__.py +0 -0
  290. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/sycommon/xxljob/xxljob_service.py +0 -0
  291. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/sycommon_python_lib.egg-info/dependency_links.txt +0 -0
  292. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/sycommon_python_lib.egg-info/entry_points.txt +0 -0
  293. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/src/sycommon_python_lib.egg-info/top_level.txt +0 -0
  294. {sycommon_python_lib-0.2.5a25 → sycommon_python_lib-0.2.5a27}/tests/test_sycli.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: sycommon-python-lib
3
- Version: 0.2.5a25
3
+ Version: 0.2.5a27
4
4
  Summary: Add your description here
5
5
  Requires-Python: >=3.11
6
6
  Description-Content-Type: text/markdown
@@ -9,7 +9,7 @@ Requires-Dist: aiohttp==3.13.5
9
9
  Requires-Dist: aiomysql==0.3.2
10
10
  Requires-Dist: anyio==4.13.0
11
11
  Requires-Dist: decorator==5.3.1
12
- Requires-Dist: deepagents==0.6.4
12
+ Requires-Dist: deepagents==0.6.6
13
13
  Requires-Dist: elasticsearch==9.4.1
14
14
  Requires-Dist: fastapi==0.136.3
15
15
  Requires-Dist: jinja2==3.1.6
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "sycommon-python-lib"
3
- version = "0.2.5a25"
3
+ version = "0.2.5a27"
4
4
  description = "Add your description here"
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.11"
@@ -10,7 +10,7 @@ dependencies = [
10
10
  "aiomysql==0.3.2",
11
11
  "anyio==4.13.0",
12
12
  "decorator==5.3.1",
13
- "deepagents==0.6.4",
13
+ "deepagents==0.6.6",
14
14
  "elasticsearch==9.4.1",
15
15
  "fastapi==0.136.3",
16
16
  "jinja2==3.1.6",
@@ -54,6 +54,11 @@ package-data = {command = ["templates/**/*", "templates/**/.*"], sycommon = ["ll
54
54
  requires = ["setuptools"]
55
55
  build-backend = "setuptools.build_meta"
56
56
 
57
+ [dependency-groups]
58
+ dev = [
59
+ "pytest>=9.0.3",
60
+ ]
61
+
57
62
  [project.scripts]
58
63
  sycommon = "command.cli:main"
59
64
  sycli = "sycli.cli:main"
@@ -62,6 +62,9 @@ class EventType(str, Enum):
62
62
  PARALLEL_AGENTS = "parallel_agents" # 并行 Agent
63
63
  AGENT_COMPLETE = "agent_complete" # Agent 任务完成
64
64
 
65
+ # 评分相关
66
+ RUBRIC_EVALUATION = "rubric_evaluation" # Rubric 评估结果
67
+
65
68
  # 生命周期
66
69
  DONE = "done" # 完成
67
70
  ERROR = "error" # 错误
@@ -368,6 +371,39 @@ class ChatEventBuilder:
368
371
  """
369
372
  return ChatEvent(EventType.CANCELLED, {"message": message})
370
373
 
374
+ # ============== 评分相关 ==============
375
+
376
+ @staticmethod
377
+ def rubric_evaluation(
378
+ iteration: int,
379
+ result: str,
380
+ criteria: list,
381
+ explanation: str = "",
382
+ agent: str = DEFAULT_AGENT_NAME,
383
+ ) -> ChatEvent:
384
+ """
385
+ 构建 Rubric 评估事件
386
+
387
+ Args:
388
+ iteration: 评估迭代次数
389
+ result: 评估结果(satisfied / needs_revision / failed / max_iterations_reached / grader_error)
390
+ criteria: 各评分标准的判定列表
391
+ explanation: 评估说明
392
+ agent: Agent 名称
393
+
394
+ Returns:
395
+ ChatEvent: 评估事件
396
+ """
397
+ data = {
398
+ "iteration": iteration,
399
+ "result": result,
400
+ "criteria": criteria,
401
+ "agent": agent,
402
+ }
403
+ if explanation:
404
+ data["explanation"] = explanation
405
+ return ChatEvent(EventType.RUBRIC_EVALUATION, data)
406
+
371
407
 
372
408
  # ============== 便捷函数(直接返回字典,兼容旧代码) ==============
373
409
 
@@ -117,10 +117,28 @@ class AgentConfig(BaseModel):
117
117
  # 调试模式
118
118
  debug: bool = False
119
119
 
120
+ # Rubric 评分配置
121
+ rubric_max_iterations: int = 3 # rubric 评估最大迭代次数(0 = 不启用)
122
+
120
123
  class Config:
121
124
  arbitrary_types_allowed = True
122
125
 
123
126
 
127
+ class _RubricEvalCollector:
128
+ """收集 RubricMiddleware 通过 on_evaluation 回调产生的评估结果"""
129
+
130
+ def __init__(self):
131
+ self.evaluations: list = []
132
+
133
+ def on_evaluation(self, evaluation):
134
+ """RubricMiddleware 每次评估完成后调用"""
135
+ self.evaluations.append(evaluation)
136
+
137
+ @property
138
+ def latest(self):
139
+ return self.evaluations[-1] if self.evaluations else None
140
+
141
+
124
142
  class DeepAgent:
125
143
  """数字员工封装类"""
126
144
 
@@ -131,12 +149,14 @@ class DeepAgent:
131
149
  config: Dict[str, Any],
132
150
  sandbox_backend: HTTPSandboxBackend,
133
151
  recovery_manager: Optional[SandboxRecoveryManager] = None,
152
+ rubric_eval_collector: Optional[_RubricEvalCollector] = None,
134
153
  ):
135
154
  self.user_id = user_id
136
155
  self.agent = agent
137
156
  self.config = config
138
157
  self.sandbox_backend = sandbox_backend
139
158
  self.recovery_manager = recovery_manager
159
+ self.rubric_eval_collector = rubric_eval_collector
140
160
 
141
161
  async def cleanup(self):
142
162
  """清理资源"""
@@ -149,6 +169,7 @@ class DeepAgent:
149
169
  async def chat(
150
170
  self,
151
171
  message: str,
172
+ rubric: Optional[str] = None,
152
173
  cancel_event: Optional[asyncio.Event] = None,
153
174
  on_event: Optional[Callable[[ChatEvent], Awaitable[None]]] = None,
154
175
  ) -> AsyncGenerator[ChatEvent, None]:
@@ -156,6 +177,7 @@ class DeepAgent:
156
177
 
157
178
  Args:
158
179
  message: 用户消息
180
+ rubric: 评分标准(可选),传入后 agent 完成时会自动评估是否满足标准
159
181
  cancel_event: 取消事件(用于取消当前任务)
160
182
  on_event: 事件回调,每个事件触发后调用(可用于 DB 持久化等)
161
183
 
@@ -172,8 +194,11 @@ class DeepAgent:
172
194
  total_output_tokens = 0
173
195
 
174
196
  try:
197
+ input_state = {"messages": [HumanMessage(content=message)]}
198
+ if rubric:
199
+ input_state["rubric"] = rubric
175
200
  async for chunk in self._astream_with_retry(
176
- {"messages": [HumanMessage(content=message)]},
201
+ input_state,
177
202
  max_retries=3,
178
203
  base_delay=1.0,
179
204
  ):
@@ -650,6 +675,8 @@ async def create_deep_agent(
650
675
 
651
676
  # 创建 agent
652
677
  from deepagents import create_deep_agent as _create_deep_agent
678
+ from deepagents import RubricMiddleware
679
+ from deepagents.middleware.filesystem import FilesystemMiddleware
653
680
 
654
681
  # 创建 compact_conversation 工具 middleware
655
682
  # 自动压缩由 deepagents 内置的 SummarizationMiddleware 处理(通过 model.profile 获取阈值)
@@ -657,6 +684,27 @@ async def create_deep_agent(
657
684
  model, config.model_name, sandbox_backend,
658
685
  )
659
686
 
687
+ # 🔑 Rubric 评估收集器:通过 on_evaluation 回调收集评估结果
688
+ rubric_eval_collector = None
689
+
690
+ # 构建 middleware 列表
691
+ middleware_list = [
692
+ ToolResultTruncationMiddleware(),
693
+ TokenTrackingMiddleware(model_name=config.model_name, user_id=user_id),
694
+ summarization_mw,
695
+ ]
696
+
697
+ # RubricMiddleware:复用 FilesystemMiddleware 的工具(底层走 HTTPSandboxBackend HTTP 远程调用)
698
+ if config.rubric_max_iterations > 0 and sandbox_backend:
699
+ rubric_eval_collector = _RubricEvalCollector()
700
+ _rubric_fs_middleware = FilesystemMiddleware(backend=sandbox_backend)
701
+ middleware_list.append(RubricMiddleware(
702
+ model=model,
703
+ tools=_rubric_fs_middleware.tools,
704
+ max_iterations=config.rubric_max_iterations,
705
+ on_evaluation=rubric_eval_collector.on_evaluation,
706
+ ))
707
+
660
708
  agent_kwargs = {
661
709
  "model": model,
662
710
  "tools": config.tools or [get_current_date],
@@ -664,11 +712,7 @@ async def create_deep_agent(
664
712
  "checkpointer": checkpointer,
665
713
  "system_prompt": config.system_prompt,
666
714
  "debug": config.debug,
667
- "middleware": [
668
- ToolResultTruncationMiddleware(),
669
- TokenTrackingMiddleware(model_name=config.model_name, user_id=user_id),
670
- summarization_mw,
671
- ],
715
+ "middleware": middleware_list,
672
716
  }
673
717
  if skills_path:
674
718
  agent_kwargs["skills"] = [skills_path]
@@ -685,6 +729,7 @@ async def create_deep_agent(
685
729
  config=agent_config,
686
730
  sandbox_backend=sandbox_backend,
687
731
  recovery_manager=recovery_manager,
732
+ rubric_eval_collector=rubric_eval_collector,
688
733
  )
689
734
 
690
735
 
@@ -510,9 +510,15 @@ class FileOperationsMixin:
510
510
  })
511
511
  # GrepResponse: {"matches": [...], "partial_error": "...", "error": "..."}
512
512
  matches = [GrepMatch(**item) for item in result.get("matches", [])]
513
+ # deepagents GrepResult 只有 error 和 matches 字段,
514
+ # 将 partial_error 合并到 error 中(部分失败但有结果时不设 error)
515
+ partial_error = result.get("partial_error")
516
+ error = result.get("error")
517
+ if not error and partial_error and not matches:
518
+ error = partial_error
513
519
  return GrepResult(
514
520
  matches=matches,
515
- error=result.get("error"),
521
+ error=error,
516
522
  )
517
523
  except Exception as e:
518
524
  SYLogger.error(f"[Sandbox] grep 搜索失败: {e}")
@@ -537,9 +543,13 @@ class FileOperationsMixin:
537
543
  }, timeout=timeout)
538
544
  # GrepResponse: {"matches": [...], "partial_error": "...", "error": "..."}
539
545
  matches = [GrepMatch(**item) for item in result.get("matches", [])]
546
+ partial_error = result.get("partial_error")
547
+ error = result.get("error")
548
+ if not error and partial_error and not matches:
549
+ error = partial_error
540
550
  return GrepResult(
541
551
  matches=matches,
542
- error=result.get("error"),
552
+ error=error,
543
553
  )
544
554
  except Exception as e:
545
555
  SYLogger.error(f"[Sandbox] 异步 grep 搜索失败: {e}")
@@ -0,0 +1,114 @@
1
+ import asyncio
2
+ from contextlib import asynccontextmanager
3
+ from sqlalchemy.exc import OperationalError, InterfaceError, InternalError
4
+ from sqlalchemy.ext.asyncio import AsyncSession, async_sessionmaker
5
+ from sycommon.config.Config import SingletonMeta
6
+ from sycommon.database.async_database_service import AsyncDatabaseService
7
+ from sycommon.logging.kafka_log import SYLogger
8
+
9
+ # 连接级错误:连接已断,事务必定已丢失,重试安全
10
+ _CONNECTION_ERROR_CODES = {2006, 2013}
11
+ # 事务级错误:死锁、锁等待超时,由调用方决定是否重试
12
+ _RETRYABLE_TX_ERROR_CODES = {1205, 1213, 1206}
13
+
14
+
15
+ def _is_connection_error(exc: Exception) -> bool:
16
+ """判断是否为连接级错误(断开、宕机),可安全重试"""
17
+ if isinstance(exc, (OperationalError, InterfaceError)):
18
+ if exc.orig and hasattr(exc.orig, 'errno'):
19
+ return exc.orig.errno in _CONNECTION_ERROR_CODES
20
+ return False
21
+
22
+
23
+ def _is_retryable_tx_error(exc: Exception) -> bool:
24
+ """判断是否为可重试的事务级错误(死锁、锁超时)"""
25
+ if isinstance(exc, (OperationalError, InternalError)):
26
+ if exc.orig and hasattr(exc.orig, 'errno'):
27
+ return exc.orig.errno in _RETRYABLE_TX_ERROR_CODES
28
+ return False
29
+
30
+
31
+ class AsyncBaseDBService(metaclass=SingletonMeta):
32
+ """数据库操作基础服务类,封装异步会话管理功能"""
33
+
34
+ def __init__(self):
35
+ self.engine = AsyncDatabaseService.engine()
36
+ self.Session = async_sessionmaker(
37
+ bind=self.engine,
38
+ class_=AsyncSession,
39
+ expire_on_commit=False
40
+ )
41
+
42
+ @asynccontextmanager
43
+ async def session(self):
44
+ """
45
+ 异步数据库会话上下文管理器
46
+ 自动处理会话的创建、提交、回滚和关闭
47
+ """
48
+ async with self.Session() as session:
49
+ try:
50
+ yield session
51
+ await session.commit()
52
+ except Exception as e:
53
+ await session.rollback()
54
+ SYLogger.error(f"Database operation failed: {str(e)}")
55
+ raise
56
+
57
+ async def execute(self, fn, retry: int = 0):
58
+ """
59
+ 执行异步数据库操作,支持自动重试
60
+
61
+ 连接级错误(连接断开 2006/2013)始终自动重试1次。
62
+ 事务级错误(死锁 1213、锁超时 1205)按 retry 参数重试。
63
+
64
+ Args:
65
+ fn: 接收 session 参数的异步可调用对象,例如:
66
+ async def query(session): return (await session.execute(select(User))).scalars().all()
67
+ retry: 事务级错误最大重试次数,默认0不重试
68
+
69
+ Returns:
70
+ fn 的返回值
71
+
72
+ Usage:
73
+ result = await self.execute(
74
+ lambda session: session.execute(select(User)),
75
+ retry=3
76
+ )
77
+ """
78
+ attempt = 0
79
+ max_attempts = 1 + max(retry, 0)
80
+ connection_retried = False
81
+ last_exc = None
82
+
83
+ while True:
84
+ async with self.Session() as session:
85
+ try:
86
+ result = await fn(session)
87
+ await session.commit()
88
+ return result
89
+ except Exception as e:
90
+ await session.rollback()
91
+ last_exc = e
92
+
93
+ # 连接级错误:始终自动重试1次(不计入 max_attempts)
94
+ if _is_connection_error(e) and not connection_retried:
95
+ connection_retried = True
96
+ SYLogger.warning(
97
+ f"DB connection lost (errno={getattr(e.orig, 'errno', None)}), retrying..."
98
+ )
99
+ attempt += 1
100
+ continue
101
+
102
+ # 事务级错误:按 retry 参数重试
103
+ if retry > 0 and _is_retryable_tx_error(e) and attempt < max_attempts - 1:
104
+ attempt += 1
105
+ backoff = min(0.5 * (2 ** (attempt - 1)), 2.0)
106
+ SYLogger.warning(
107
+ f"DB retryable error (errno={getattr(e.orig, 'errno', None)}), "
108
+ f"attempt {attempt}/{max_attempts}, backoff {backoff}s"
109
+ )
110
+ await asyncio.sleep(backoff)
111
+ continue
112
+
113
+ SYLogger.error(f"Database operation failed: {str(e)}")
114
+ raise
@@ -0,0 +1,114 @@
1
+ import time
2
+ from contextlib import contextmanager
3
+ from sqlalchemy.orm import sessionmaker
4
+ from sqlalchemy.exc import OperationalError, InterfaceError, InternalError
5
+ from sycommon.config.Config import SingletonMeta
6
+ from sycommon.database.database_service import DatabaseService
7
+ from sycommon.logging.kafka_log import SYLogger
8
+
9
+ # 连接级错误:连接已断,事务必定已丢失,重试安全
10
+ _CONNECTION_ERROR_CODES = {2006, 2013}
11
+ # 事务级错误:死锁、锁等待超时,由调用方决定是否重试
12
+ _RETRYABLE_TX_ERROR_CODES = {1205, 1213, 1206}
13
+
14
+
15
+ def _is_connection_error(exc: Exception) -> bool:
16
+ """判断是否为连接级错误(断开、宕机),可安全重试"""
17
+ if isinstance(exc, (OperationalError, InterfaceError)):
18
+ if exc.orig and hasattr(exc.orig, 'errno'):
19
+ return exc.orig.errno in _CONNECTION_ERROR_CODES
20
+ return False
21
+
22
+
23
+ def _is_retryable_tx_error(exc: Exception) -> bool:
24
+ """判断是否为可重试的事务级错误(死锁、锁超时)"""
25
+ if isinstance(exc, (OperationalError, InternalError)):
26
+ if exc.orig and hasattr(exc.orig, 'errno'):
27
+ return exc.orig.errno in _RETRYABLE_TX_ERROR_CODES
28
+ return False
29
+
30
+
31
+ class BaseDBService(metaclass=SingletonMeta):
32
+ """数据库操作基础服务类,封装会话管理功能"""
33
+
34
+ def __init__(self):
35
+ self.engine = DatabaseService.engine()
36
+ self.Session = sessionmaker(bind=self.engine)
37
+
38
+ @contextmanager
39
+ def session(self):
40
+ """
41
+ 数据库会话上下文管理器
42
+ 自动处理会话的创建、提交、回滚和关闭
43
+ """
44
+ session = self.Session()
45
+ try:
46
+ yield session
47
+ session.commit()
48
+ except Exception as e:
49
+ session.rollback()
50
+ SYLogger.error(f"Database operation failed: {str(e)}")
51
+ raise
52
+ finally:
53
+ session.close()
54
+
55
+ def execute(self, fn, retry: int = 0):
56
+ """
57
+ 执行数据库操作,支持自动重试
58
+
59
+ 连接级错误(连接断开 2006/2013)始终自动重试1次。
60
+ 事务级错误(死锁 1213、锁超时 1205)按 retry 参数重试。
61
+
62
+ Args:
63
+ fn: 接收 session 参数的可调用对象,例如:
64
+ lambda session: session.query(User).all()
65
+ retry: 事务级错误最大重试次数,默认0不重试
66
+
67
+ Returns:
68
+ fn 的返回值
69
+
70
+ Usage:
71
+ result = self.execute(
72
+ lambda session: session.query(User).all(),
73
+ retry=3
74
+ )
75
+ """
76
+ attempt = 0
77
+ max_attempts = 1 + max(retry, 0)
78
+ connection_retried = False
79
+ last_exc = None
80
+
81
+ while True:
82
+ session = self.Session()
83
+ try:
84
+ result = fn(session)
85
+ session.commit()
86
+ return result
87
+ except Exception as e:
88
+ session.rollback()
89
+ last_exc = e
90
+
91
+ # 连接级错误:始终自动重试1次(不计入 max_attempts)
92
+ if _is_connection_error(e) and not connection_retried:
93
+ connection_retried = True
94
+ SYLogger.warning(
95
+ f"DB connection lost (errno={getattr(e.orig, 'errno', None)}), retrying..."
96
+ )
97
+ attempt += 1
98
+ continue
99
+
100
+ # 事务级错误:按 retry 参数重试
101
+ if retry > 0 and _is_retryable_tx_error(e) and attempt < max_attempts - 1:
102
+ attempt += 1
103
+ backoff = min(0.5 * (2 ** (attempt - 1)), 2.0)
104
+ SYLogger.warning(
105
+ f"DB retryable error (errno={getattr(e.orig, 'errno', None)}), "
106
+ f"attempt {attempt}/{max_attempts}, backoff {backoff}s"
107
+ )
108
+ time.sleep(backoff)
109
+ continue
110
+
111
+ SYLogger.error(f"Database operation failed: {str(e)}")
112
+ raise
113
+ finally:
114
+ session.close()
@@ -312,15 +312,6 @@ class LLMWithTokenTracking(BaseChatModel):
312
312
  return self.llm.profile
313
313
  return None
314
314
 
315
- @property
316
- def profile(self):
317
- p = self._resolve_model_profile()
318
- return p
319
-
320
- @profile.setter
321
- def profile(self, value):
322
- pass
323
-
324
315
  def bind_tools(self, tools, *, tool_choice=None, **kwargs):
325
316
  """绑定工具 - 委托给底层 LLM,返回绑定后的 Runnable"""
326
317
  return self.llm.bind_tools(tools, tool_choice=tool_choice, **kwargs)
@@ -1,6 +1,7 @@
1
1
  import os
2
2
  import sys
3
3
  import json
4
+ import logging
4
5
  import socket
5
6
  import threading
6
7
  import traceback
@@ -176,6 +177,23 @@ class KafkaSink:
176
177
  pass
177
178
 
178
179
 
180
+ class _InterceptHandler(logging.Handler):
181
+ """将 stdlib logging 日志桥接到 Loguru,使 asyncio 等第三方库的日志进入 Kafka 管道"""
182
+
183
+ def emit(self, record: logging.LogRecord) -> None:
184
+ try:
185
+ level = logger.level(record.levelname).name
186
+ except ValueError:
187
+ level = record.levelno
188
+
189
+ frame, depth = logging.currentframe(), 2
190
+ while frame and frame.f_code.co_filename == logging.__file__:
191
+ frame = frame.f_back
192
+ depth += 1
193
+
194
+ logger.opt(depth=depth, exception=record.exc_info).log(level, record.getMessage())
195
+
196
+
179
197
  class KafkaLogger(metaclass=SingletonMeta):
180
198
  _sink_instance = None
181
199
 
@@ -206,8 +224,48 @@ class KafkaLogger(metaclass=SingletonMeta):
206
224
  diagnose=True
207
225
  )
208
226
 
227
+ # 桥接 stdlib logging → Loguru,捕获 asyncio 等第三方库的日志
228
+ intercept_handler = _InterceptHandler()
229
+ logging.root.handlers = [intercept_handler]
230
+ logging.root.setLevel(logging.WARNING)
231
+
209
232
  sys.excepthook = KafkaLogger._handle_exception
210
233
 
234
+ # 注册 asyncio 异常处理器,捕获未处理的 Task 异常
235
+ KafkaLogger._setup_asyncio_exception_handler()
236
+
237
+ @staticmethod
238
+ def _setup_asyncio_exception_handler():
239
+ """注册 asyncio 事件循环异常处理器,将未处理的 Task 异常导入 Kafka"""
240
+ try:
241
+ loop = asyncio.get_running_loop()
242
+ loop.set_exception_handler(KafkaLogger._asyncio_exception_handler)
243
+ except RuntimeError:
244
+ pass
245
+
246
+ @staticmethod
247
+ def _asyncio_exception_handler(loop, context):
248
+ """asyncio 未处理异常回调,通过 SYLogger 记录到 Kafka"""
249
+ message = context.get("exception", context.get("message", "Unknown asyncio error"))
250
+ exception = context.get("exception")
251
+
252
+ if exception:
253
+ tb_str = "".join(traceback.format_exception(
254
+ type(exception), exception, exception.__traceback__
255
+ ))
256
+ else:
257
+ tb_str = str(message)
258
+
259
+ trace_id = current_trace_id.get() or str(Snowflake.id)
260
+ error_msg = json.dumps({
261
+ "trace_id": trace_id,
262
+ "message": f"asyncio unhandled: {message}",
263
+ "level": "ERROR",
264
+ "detail": tb_str,
265
+ }, ensure_ascii=False)
266
+
267
+ logger.opt(exception=True).error(error_msg)
268
+
211
269
  @staticmethod
212
270
  def _handle_exception(exc_type, exc_value, exc_traceback):
213
271
  if issubclass(exc_type, KeyboardInterrupt):
@@ -33,7 +33,7 @@ class RabbitMQListenerConfig(BaseModel):
33
33
  auto_parse_json: bool = Field(True, description="是否自动解析JSON消息")
34
34
  prefetch_count: int = Field(2, description="同时消费并发数(控制MQ预取与handler并发上限)")
35
35
  max_priority: Optional[int] = Field(
36
- None, description="队列支持的最大优先级(对应 x-max-priority)")
36
+ 10, description="队列支持的最大优先级(对应 x-max-priority)")
37
37
 
38
38
  class Config:
39
39
  """模型配置"""
@@ -42,7 +42,7 @@ class RabbitMQClient:
42
42
  auto_delete: bool = False,
43
43
  auto_parse_json: bool = True,
44
44
  create_if_not_exists: bool = True,
45
- max_priority: Optional[int] = None,
45
+ max_priority: Optional[int] = 10,
46
46
  **kwargs,
47
47
  ):
48
48
  self.connection_pool = connection_pool
@@ -265,6 +265,14 @@ class Services(metaclass=SingletonMeta):
265
265
  sandbox_cleanup_task = None
266
266
 
267
267
  try:
268
+ # 注册 asyncio 异常处理器(需在事件循环运行后)
269
+ try:
270
+ from sycommon.logging.kafka_log import KafkaLogger
271
+ loop = asyncio.get_running_loop()
272
+ loop.set_exception_handler(KafkaLogger._asyncio_exception_handler)
273
+ except Exception as e:
274
+ logging.debug(f"注册 asyncio 异常处理器失败: {e}")
275
+
268
276
  # 1. 处理数据库服务
269
277
  if database_service:
270
278
  instance._pending_async_db_setup = []
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: sycommon-python-lib
3
- Version: 0.2.5a25
3
+ Version: 0.2.5a27
4
4
  Summary: Add your description here
5
5
  Requires-Python: >=3.11
6
6
  Description-Content-Type: text/markdown
@@ -9,7 +9,7 @@ Requires-Dist: aiohttp==3.13.5
9
9
  Requires-Dist: aiomysql==0.3.2
10
10
  Requires-Dist: anyio==4.13.0
11
11
  Requires-Dist: decorator==5.3.1
12
- Requires-Dist: deepagents==0.6.4
12
+ Requires-Dist: deepagents==0.6.6
13
13
  Requires-Dist: elasticsearch==9.4.1
14
14
  Requires-Dist: fastapi==0.136.3
15
15
  Requires-Dist: jinja2==3.1.6
@@ -286,4 +286,5 @@ src/sycommon_python_lib.egg-info/dependency_links.txt
286
286
  src/sycommon_python_lib.egg-info/entry_points.txt
287
287
  src/sycommon_python_lib.egg-info/requires.txt
288
288
  src/sycommon_python_lib.egg-info/top_level.txt
289
+ tests/test_asyncio_logging.py
289
290
  tests/test_sycli.py
@@ -3,7 +3,7 @@ aiohttp==3.13.5
3
3
  aiomysql==0.3.2
4
4
  anyio==4.13.0
5
5
  decorator==5.3.1
6
- deepagents==0.6.4
6
+ deepagents==0.6.6
7
7
  elasticsearch==9.4.1
8
8
  fastapi==0.136.3
9
9
  jinja2==3.1.6